Programmingバックエンド開発者

Perlでモジュールを組織しインポートする方法は何ですか?@INCシステムとuse/requireはどのように機能しますか?独自のモジュールを作成して接続する例を示してください。

Hintsage AIアシスタントで面接を突破

回答

Perlでコードを整理するためにモジュール(パッケージ)を使用し、これらは.pm拡張子の別ファイルに格納されます。

  • モジュールを接続するには、use(コンパイル時)およびrequire(実行時)を使用します。
  • モジュールを検索する際、Perlは特別な配列@INCを使用します。この配列は、Perlがモジュールを探すディレクトリのリストです。

モジュールの例:

Foo.pm

package Foo; use strict; use warnings; sub say_hello { print "Hello from Foo! "; } 1;

接続と使用:

use lib '.'; # 現在のフォルダーを@INCに追加 use Foo; Foo::say_hello(); # 出力: Hello from Foo!

主な違い:

  • useはスクリプトの実行開始時にモジュールをインポートし、自動的にimportメソッドを呼び出します(通常はモジュール用)。
  • requireは最初の呼び出し時にのみモジュールを読み込みます。

トリックのある質問

userequireの違いは何ですか?いつどの演算子を使用するべきですか?

回答:

  • use — コンパイル時に作用し、自動的にimportを呼び出します(通常はモジュール用)。
  • require — 実行時に作用し、モジュール名が実行時まで不明な場合や、常に接続する必要がない場合に必要です。

知識不足による実際のエラーの例


物語

大規模プロジェクトで独自のライブラリをrequireを通じて接続したが、エクスポートされた関数を使用することを忘れた。使用された関数はエクスポートされなかった、なぜならrequireimportを呼び出さなかったから。結果 — シンボルのインポートが機能せず、関数を明示的に呼び出さなければならなかった。


物語

モジュールを別のフォルダーに移動する際、use libを通じてフォルダーへのパスを追加するか、@INC変数を変更するのを忘れた。モジュールが見つからず、スクリプトはエラーで終了した。ファイルはプロジェクトに対して正しい場所にあったにもかかわらず。


物語

古いアプリケーションでモジュールを小文字で命名し、大文字で接続した:use foo;ではなくuse Foo;。Perlはモジュールを見つけられず、アプリケーションの重要部分の機能が損なわれた。