2012-06-17 7 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:お勧めの方法は何ですか? use MySw::PerlDefs;を追加

  1. ので

     
    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 
    

質問:

  • 好ましい方法は何ですか?
  • 違いおよび/または欠点は何ですか?

シモンズ:私はコンパイル時にexectuted BEGINよりも理解が、上記の文脈で - それは「簡単な使用」以上で良いですか?

+0

[ 'Package'を使用](http://perldoc.perl.org/functions/use.html)は' BEGIN {必要とするパッケージと同じです。パッケージ - >インポート()} ' –

+0

アップグレードされたPerlを、おそらくperlbrewでインストールすることはできませんか?いくつかの現代的な機能は、古いPerlのバージョンでは利用できませんでした(例えば、 '= =')。新しいバグの修正 – 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はい。それは簡単です...些細な事を求めて自分自身を憎む..;(やっぱり;) – kobame

関連する問題