2016-12-03 11 views
3

私はData :: Dumperを頻繁に使用する傾向があり、私の.plコード内のすべてのパッケージの先頭に次の定型文を持つことになります。Perlはすべてのパッケージにインポートできますか?

use strict; 
use warnings; 
use Data::Dumper; 
$Data::Dumper::Deparse = 1; 
$Data::Dumper::Purity = 1; 

「現在の.plファイル内に、これらのステートメントを自動的に仮定します。」と指定する方法はありますか?

例えば私は、これはすぐにあまりにも多くの定型反復を取得し、保守性を害することができ

package foo; 
    use strict; 
    use warnings; 
    use Data::Dumper; 
    $Data::Dumper::Deparse = 1; 
    $Data::Dumper::Purity = 1; 

    my @localState = (1, 2, 3, 4, 5); 

    sub test { 
     print Dumper \@localState; 
    } 

package main; 
    use strict; 
    use warnings; 
    use Data::Dumper; 
    $Data::Dumper::Deparse = 1; 
    $Data::Dumper::Purity = 1; 

    foo->test; 

を持っているでしょう。

悲しいことに、この定型句はグローバルスコープではなく関数に配置されるため、この定型句を呼び出すために、 "eval"という関数を使用することはできません。 Perlには、実際には関数にバインドされていないeval-like bahaviorを持つために私が知っているLispマクロはありません(Perlがlispマクロを持っていれば間違いかもしれません)。

ファイル内で宣言されている最初のパッケージであれば、この動作をパーサーで記述することなく実現できますか?

答えて

5

プラグマをオンにし、モジュールとセットをロードし、ロードする独自のツールボックスモジュールを構築できます。モジュールImport::Into私たちはそれに最適です。

Here is a blog postについて説明しています。

あなたが設定しているData :: Dumperの設定は実際にはあなたが設定しているパッケージに関係していないことに注意してください。これらはData::Dumperパッケージ内のパッケージ変数であるため、 。あなたは本質的に同じ事柄をあなたの事例で再び上書きしています。

正当な理由がない限り、通常、複数のパッケージを1つのファイルに配置しないでください。しかし、それは上記のアドバイスを変更しません。

+1

これは私の電話から書いたので、これはリンクのみの回答です。後でコード例を追加します。 – simbabque

+0

既に大きな助けを借りています:)私は、大規模プロジェクトのダース+スクリプトの半分以上の同じインポートを回避する方法を考えてきました。これまでに私は十分にうまくいったものは見つからなかったので、これをチェックして嬉しいです! – zdim

+0

ああ...これは実際に働いている_ - 想像していることをして、簡単です。ありがとうございました。それは非常に大きなプロジェクトで非常に厄介な問題を解決しました。 – zdim

関連する問題