Go to the first, previous, next, last section, table of contents.


サブルーティン、パッケージ、モジュール

Function: bless ref,package
Function: bless ref
この関数は、(REF で渡された) 参照されるオブジェクトに対し、PACKAGE 内の オブジェクトとなったことを伝えます。通常は PACKAGE が省略され、その場合 には、その時点のパッケージとなります。bless() は通常、コンストラ クタの最後に置かれますので、簡便のためにそのリファレンスを返します。オブ ジェクトの bless (や再bless) について、詳しくは See section オブジェクト,を参照してください。

Function: caller expr
Function: caller
その時点のサブルーティン呼び出しのコンテキストを返します。スカラコンテキ ストでは、呼び元がある場合 (サブルーティン、eval()require() の中にいるとき) には真を返し、その他のときには偽を返し ます。リストコンテキストでは、
($package,$filename,$line) = caller;

を返します。

expr を付けると、デバッガがスタックトレースを表示するために使う情 報を返します。expr の値は、現状から数えて、いくつ前のコールフレー ムまで戻るかを示します。

Function: do SUBROUTINE(LIST)
望ましくないサブルーティン呼び出しの形式。 See section サブルーティン,を参照してください。

Function: do block
実際は関数ではありません。$var{block} で示されるコマンド列の最後の値を返 します。ループ修飾子で修飾すると、ループ条件を調べる前に 1 度、 $var{block} を実行します。(これ以外の実行文は、ループ修飾子により、条件 が最初に調べられます。)

Function: do expr
expr の値をファイル名として用い、そのファイルの中身を Perl のスク リプトとして実行します。主に、Perlのサブルーティンライブラリからサブルー ティンをインクルードするために用います。
do 'stat.pl';

は、

eval `cat stat.pl`;

と同じようなものですが、より効率的で、簡潔であり、エラーメッセージでファ イル名がわかる、カレントディレクトリでファイルが見つからなかったときに、 `-I' に指定された全てのディレクトリを探す、といったことがあります (See section 定義済み変数,の「定義済み名」にある @INC 配列も参照してください)。 しかし、呼び出すたびにファイルを解析し直すという点では同じですから、ルー プ内でこれを使おうなどとは、間違っても思ったりしないように。

ライブラリモジュールのインクルードには、use() 演算子や require() 演算子を使った方が良いでしょう。

Function: import
組み込みの import() 関数というものはありません。これは単に、別の モジュールに名前をエクスポートしたいモジュールが定義した、通常のメソッド サブルーティンです。use() 関数は、使用されるパッケージのために、 import() メソッドを呼び出します。このドキュメントの use の 項とSee section モジュール,を参照してください。

Function: no module list
use 関数を参照してください。 no は、その逆を行なうものです。

Function: require expr
Function: require
指定する expr か、expr 省略時には $_ によって、いくつかの意 味を使い分けます。expr が数値のときには、実行中の Perl のバージョ ン ($] か $PERL_VERSION) がexpr 以上であることが必要となります。

数値でない場合には、既に読み込まれていないときに、読み込むライブラリファ イルを要求するものとなります。そのファイルは、基本的には 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 モジュール,を参照してください。

Function: return list
サブルーティンや eval から指定した値をもって、リターンします。(サ ブルーティンや evalreturn がなければ、最後に評価された 値で、自動的にリターンします。)

Function: tie variable,packagename,list
この関数は、変数を、その変数のインプリメンテーションを行なうパッケージと 結び付けます。variable は、魔法をかける変数の名前です。 packagename は、正しい型のオブジェクトをインプリメントする、パッケー ジの名前です。他に引数があれば、そのパッケージの 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);

連想配列をインプリメントするパッケージでは、次のようなメソッドを用意しま す:

通常の配列をインプリメントするパッケージでは、次のようなメソッドを用意し ます:

スカラ変数をインプリメントするパッケージでは、次のようなメソッドを用意し ます:

Function: untie variable
変数とパッケージの間の結合を解きます。(tie() を参照してください。)

Function: use module list
Function: use module
指定したモジュールから、現在のパッケージにさまざまな内容をインポートしま す。多くは、パッケージのサブルーティン名や、変数名に別名を付けることで、 実現されています。これは、
BEGIN { require Module; import Module LIST; }

というのと、全く同値です。名前空間を変更したくない場合には、代わりに require を使ってください。

BEGIN によって、requireimport は、コンパイル時に実行さ れることになります。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.

検索式: