どこに使用しますか?
use
コンパイル時に発生するため、どこに置いてもかまいません。少なくとも純粋に実用的な観点からは、「それは機能しますか」という観点から。コンパイル時に発生するためuse
、条件付きでも常に実行されます。これは絶対にしないでください。if( $foo eq 'foo' ) { use SomeModule }
私の経験では、すべてのuseステートメントをファイルの先頭に置くのが最善です。ロードされているものと依存関係を簡単に確認できます。
アップデート:
brian d foyが指摘しているように、ステートメントの前にコンパイルされたものはuse
影響を受けません。したがって、場所が重要になる可能性があります。通常のモジュールの場合、場所は重要ではありませんが、コンパイルに影響を与えること(たとえば、プロトタイプを持つ関数をインポートすること)を行う場合は、場所が重要になる可能性があります。
また、 Chas Owensは、コンパイルに影響を与える可能性があると指摘しています。コンパイルを変更するように設計されたモジュールは、プラグマと呼ばれます。プラグマは、慣例により、すべて小文字で名前が付けられます。これらの効果は、モジュールが使用されるスコープ内でのみ適用されます。チャスはinteger
彼の答えの例としてプラグマを使用しています。キーワードを使用して、限定されたスコープでプラグマまたはモジュールを無効にすることもできますno
。
use strict;
use warnings;
my $foo;
print $foo; # Generates a warning
{ no warnings 'unitialized`; # turn off warnings for working with uninitialized values.
print $foo; # No warning here
}
print $foo; # Generates a warning
間接目的語構文
サンプルコードには、がありますmy $obj = new ObjectX;
。これは間接目的語構文と呼ばれ、あいまいなバグにつながる可能性があるため、避けるのが最善です。次のフォームを使用することをお勧めします。
my $obj = ObjectX->new;
サーバーでテストスクリプトが遅いのはなぜですか?
あなたが提供した情報で見分ける方法はありません。
ただし、コードをプロファイリングして、時間が消費されている場所 を確認するのが簡単な方法です。NYTProfは、もう1つの人気のあるプロファイリングツールです。
ベストプラクティス
Perlのベストプラクティスとクイックリファレンスカードを確認してください。このページには、PBPからのDamianConwayのOOPアドバイスの概要が記載されています。
また、 Mooseの使用を検討することもできます。スクリプトの起動時間が長いことが使用に適している場合は、Mooseが大きなメリットになります。