2009-05-18 70 views

回答

47

base試圖做一件太多的事情—自動處理加載模塊,但也允許從已經加載的類(可能來自名稱不是基於模塊名稱的文件)建立繼承。爲了使其發揮作用,在某些情況下出現了一些令人驚訝的結果。不是打破向後兼容性,而是採用更清晰的語義引入了一個新的替換編譯指示碼parent

parent將成爲5.10.1的核心模塊。

更新:忘記了base處理fields(如果你使用的是fields編譯),其中parent不做。

+21

此外,比較perl -wE'say需要基地'perl -wE'say需要父母' – ysth 2009-05-19 06:22:39

34

武裝與來自YSTH信息的額外位,我能看到文檔的差異:

base編譯並以下的事情:

  • 將指定的包@ISA
  • 使用require(除非它檢測到包已被加載)加載與命名包相同名稱的模塊
  • 如果模塊帶有th Ë同名的包不存在
  • 模具是否有指定的包
  • 如果$VERSION沒有在指定包中不存在的符號,基地將它設置爲"-1, set by base.pm"
  • 初始化姓包的fields如果它們存在
  • 不叫姓包

進口功能parent編譯做以下的事情:

  • 增加使用require
  • 接受,告訴它不要死,如果用相同名稱的模塊封裝沒有按」選項命名的包@ISA
  • 負載使用相同的名稱命名的包模塊t存在
+4

差不多。 norequire選項只是告訴它不要執行require(所以類必須已經加載)。這意味着它不必捕捉錯誤並決定是否應該抑制它們。 – ysth 2009-05-19 06:17:10

相關問題