Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 構文
  3. here

require - モジュールを実行時に読み込む

実行時にモジュールを読み込むにはrequireを使用します。useがコンパイル時にモジュールを読み込むのに対して、requireは実行時に読み込みます。

# モジュールの読み込み
require モジュール名

モジュール名は裸の文字列で指定する必要があります。クォートやダブルクォートで囲んだ文字列は受け付けません。また変数も受け付けません。

# 裸の文字列でモジュール名を指定
require CGI;

モジュールを読み込むと、完全修飾名を使って、読み込んだモジュールに記述されている関数を使用することができるようになります。

require Carp;

# 完全修飾名でCarpモジュールのcroak関数を使用できる。
Carp::croak("croak 関数");

モジュールを読み込む場合はuseを使用するのが標準的な方法ですが、requireを使いたい場面が時にはあります。useを使うとコンパイル時にすべてのモジュールが読み込まれてしまいます。そのためモジュールが巨大な場合はコンパイル時に余分な時間がかかってしまいます。

あるモジュールが必須のものでなくて、かつ大きなモジュールの場合は必要に応じてrequireを使って実行時に読み込むことでパフォーマンスへの影響を緩和することができる場合があります。

サンプル

requireを使ったサンプルです。

# Carpモジュールを読み込む。
require Carp;

requireは、実行時にモジュールをインポートしてくれます。これが有効なのは、選択的にモジュールをインポートしたい場合です。

たとえば、拡張子に応じて処理したい場合に、csvファイルを解析するモジュールとxmlを解析するモジュールのどちらか一方しか必要ないとします。

このようなとき、以下ののように記述すると、読み込むモジュールが少なくてすみます。

if ($ext eq '.csv') {
  require Text::CSV;
  # ...
}
elsif ($ext eq '.xml') {
  require XML::Simple;
  # ...
}

モジュールの読み込みが少ないということは、起動時間が短縮され、メモリの使用が抑えられるということです。useではif文などの条件分岐の中に書かれたとしても、すべてのモジュールがコンパイル時に読み込まれることになります。

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。