3

この質問がStackOverflowに適していない場合は、お詫び申し上げます。答えは主に意見の問題だと思います(スタイルガイドの1つに推奨事項がない限り)。

私はこのようなコードを持っています

use File::Temp;

sub foo {
    ...
}
sub bar {
    ...
}
sub baz {
    my $fh = tempfile();
    ...
}

bazを使用する唯一のサブルーチンであり、File::TempAutoLoaderを使用していません。use宣言を中に入れるのは合理的bazですか、それともスクリプトの先頭に残しておくべきですか?

4

2 に答える 2

5

(チェプナーが言ったように)技術的には違いがないので、それは本当にスタイルの問題です。

次にすべてを上に置くことの長所:

  • すべての直接モジュール依存関係が何であるかを一目で明確にします

  • 保守が簡単-ライブラリを使用してコードを移動する必要がある場合は、ライブラリを移動することを覚えておく必要はありません。

    同じ正確なロジックが変数宣言にも適用されることに注意してください。ただし、その場合、スコープの問題は「宣言を移動することを忘れないでください」の問題よりも大幅に優先されるため、変数を使用場所にできるだけ近い範囲で宣言する必要があります。できるだけ。

  • ロードされているすべてのライブラリに依存するブロック内の複雑なロジックが独自のコードに含まれている難解なケースの場合BEGIN{}(たとえば、ロードされたすべてのライブラリから特定の名前のメソッドを呼び出す-これを実行しました)-一部のライブラリのuse呼び出しがAFTERの場合、バグが発生しますそのBEGIN{}ブロック

それらすべてを上に置くことの短所:

  • モジュールからインポートしたものを確認するためにファイルの先頭を探す必要があるため、これによりコードが読みにくくなると主張する人もいるかもしれません。率直に言って、私はそれを信じていませんが、それが表現されているのを聞いたことがあり、少なくともいくつかのメリットがあります。
于 2012-08-02T19:14:56.340 に答える
4

use基本的に、requireステートメントをBEGINブロック内に配置するのと同じであるため、ステートメントをどこに配置するかは実際には重要ではありません。これらは、残りのコードの前に評価されます。

于 2012-08-02T19:05:26.507 に答える