bless()
は通常、コンストラ
クタの最後に置かれますので、簡便のためにそのリファレンスを返します。オブ
ジェクトの bless
(や再bless
) について、詳しくは
See section オブジェクト,を参照してください。
eval()
、
require()
の中にいるとき) には真を返し、その他のときには偽を返し
ます。リストコンテキストでは、
($package,$filename,$line) = caller;
を返します。
expr を付けると、デバッガがスタックトレースを表示するために使う情 報を返します。expr の値は、現状から数えて、いくつ前のコールフレー ムまで戻るかを示します。
do 'stat.pl';
は、
eval `cat stat.pl`;
と同じようなものですが、より効率的で、簡潔であり、エラーメッセージでファ イル名がわかる、カレントディレクトリでファイルが見つからなかったときに、 `-I' に指定された全てのディレクトリを探す、といったことがあります (See section 定義済み変数,の「定義済み名」にある @INC 配列も参照してください)。 しかし、呼び出すたびにファイルを解析し直すという点では同じですから、ルー プ内でこれを使おうなどとは、間違っても思ったりしないように。
ライブラリモジュールのインクルードには、use()
演算子や
require()
演算子を使った方が良いでしょう。
import()
関数というものはありません。これは単に、別の
モジュールに名前をエクスポートしたいモジュールが定義した、通常のメソッド
サブルーティンです。use()
関数は、使用されるパッケージのために、
import()
メソッドを呼び出します。このドキュメントの use
の
項とSee section モジュール,を参照してください。
use
関数を参照してください。 no
は、その逆を行なうものです。
数値でない場合には、既に読み込まれていないときに、読み込むライブラリファ
イルを要求するものとなります。そのファイルは、基本的には eval()
の一種である、do-FILE によって読み込まれます。意味的には、次のようなサブ
ルーティンと同じようなものです:
sub require { local($filename) = @_; return 1 if $INC{$filename}; local($realfilename,$result); ITER: { foreach $prefix (@INC) { $realfilename = "$prefix/$filename"; if (-f $realfilename) { $result = do $realfilename; last ITER; } } die "Can't find $filename in \@INC"; } die $@ if $@; die "$filename did not return true value" unless $result; $INC{$filename} = $realfilename; $result; }
ファイルは、同じ名前で 2 回読み込まれることはありません。初期化コードの 実行がうまくいったことを示すために、ファイルは真を返さなければなりません から、真を返すようになっている自信がある場合を除いては、ファイルの最後に "1;" と書くのが習慣です。実行文を追加するような場合に備えて、"1;" と書い ておいた方が良いでしょう。
expr が裸の単語であるときには、標準モジュールのロードを簡単にする
ように、require
は拡張子が `.pm' であると仮定します。この形
式のモジュールロードは、名前空間を変更してしまう危険はありません。
より強力な import 機能については、このドキュメントの use()
の項と、
See section モジュール,を参照してください。
eval
から指定した値をもって、リターンします。(サ
ブルーティンや eval
に return
がなければ、最後に評価された
値で、自動的にリターンします。)
new
メソッドに渡
されます。通常、これらは、C の dbm_open()などの関数に渡す引数となります。
大きな DBM ファイルでは、keys()
や values()
のような関数は、
大きな配列値を返す可能性があります。大きなDBM ファイルでは、
each()
関数を使って繰り返しを行なった方が、よいかもしれません。例:
# print out history file offsets tie(%HIST, NDBM_File, '/usr/lib/news/history', 1, 0); while (($key,$val) = each %HIST) { print $key, ' = ', unpack('L',$val), "\n"; } untie(%HIST);
連想配列をインプリメントするパッケージでは、次のようなメソッドを用意しま す:
通常の配列をインプリメントするパッケージでは、次のようなメソッドを用意し ます:
スカラ変数をインプリメントするパッケージでは、次のようなメソッドを用意し ます:
tie()
を参照してください。)
BEGIN { require Module; import Module LIST; }
というのと、全く同値です。名前空間を変更したくない場合には、代わりに
require
を使ってください。
BEGIN によって、require
や import
は、コンパイル時に実行さ
れることになります。require
は、モジュールがまだ、メモリーにロー
ドされていなければ、ロードします。import
は、組込みの関数ではなく、
さまざまな機能を現在のパッケージにインポートするように、`Module' パッ
ケージに伝えるために呼ばれる、通常の静的メソッドです。モジュール側では、
import
メソッドをどのようにでもインプリメントすることができますが、
多くのモジュールでは、`Exporter' モジュールで定義された、
`Exporter' クラスからの継承によって、import
メソッドを行なう
ようにしています。
これは、広く公開されているインタフェースですので、プラグマ (コンパイラディ レクティブ) は、この方法でインプリメントされています。現在インプリメント されているプラグマには、以下のものがあります:
use integer; use sigtrap qw(SEGV BUS); use strict qw(subs vars refs); use subs qw(afunc blurfl);
通常のモジュールが、現在のパッケージにシンボルをインポートする (これは、 ファイルの終わりまで有効です) のに対して、これらの擬似モジュールは、現在 のブロックスコープにインポートを行ないます。
これに対して、no
コマンドという、use
によってインポートさ
れたものを、インポートされていないことにするものがあります。
no integer; no strict 'refs';
標準モジュールやプラグマの一覧は、See section モジュール,を参照してください。
Go to the first, previous, next, last section, table of contents.