2012-06-17 17 views
6

我有一個非常古老的perl系統(大約8-10歲),但是一個很大的(100 + pm文件)。現在由於某種原因,需要「重塑」它 - 逐步進行。正確的方法將我自己的編譯指示添加到老perl sw

一個我想要得到完成第一件事是插入到每一個模塊我編譯:

use MySw::PerlDefs; 

究竟會含有像Modern::Perl事物和/或在這個問題:How to make "use My::defaults" with modern perl & utf8 defaults?

QST1:推薦的方式是什麼?

  1. 加入use MySw::PerlDefs;這樣會得到

     
    package MySw::SomePackage; 
    use MySw::PerlDefs;   #my new "pragma" 
    

  2. 或添加在包裝上聲明之後BEGIN的PerlDefs?例如爲:

     
    package MySw::SomePackage; 
    BEGIN {use MySw::PerlDefs;} #my new "pragma" in the BEGIN block 
    

問題:

  • 什麼是首選的方法?
  • 有什麼區別和/或缺點?

ps:我知道比在編譯時BEGIN exectuted,但在上面的上下文中 - 它不比「簡單使用」更好?

+0

['使用Package'](http://perldoc.perl.org/functions/use.html)是相同的'BEGIN {需要包裝; Package-> import()}' –

+0

安裝升級的Perl是否沒有希望,或許與perlbrew?一些現代功能在舊的Perl版本中不可用(例如'// =')。加上所有不錯的新bug修復。 – DavidO

+0

試圖僅將您的編譯指示碼修改爲現有的應用程序將不會順利進行。這就是說:100 +模塊並不是那麼大。 1000+是。 – duskwuff

回答

3

包裝在BEGIN塊中的使用不起作用;詞彙雜記的效果將不會超出該塊的結束。

比較:

$ perl -e'BEGIN{ use Modern::Perl; } $x=42; print "$x\n"' 
42 
$ perl -e'use Modern::Perl; $x=42; print "$x\n"' 
Global symbol "$x" requires explicit package name at -e line 1. 
Global symbol "$x" requires explicit package name at -e line 1. 
Execution of -e aborted due to compilation errors. 
+0

OMG是的。這很簡單...恨我自己提出這麼微不足道的事情;;(thanx。;) – kobame

相關問題