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.