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


定義済み変数

以下の名前は Perl では特別な意味を持ちます。記号的な名前の多くは記憶法が あるか、シェルでの類推が可能です。それでも長い名前を使用したい場合には

use English;

とプログラムの最初に書いてください。これは、すべての短い名前の別名として、 カレントパッケージで長い名前を付けるものです。awk から持ってきた中間的な 名前を持っているものもあります。

もう一歩すすめて、現在選択されているファイルハンドルに依存する変数の場合 には、代わりに FileHandle オブジェクトに関するオブジェクトメソッ ドを呼び出して設定することができます。 (以下の要約では HANDLE という語を 含んでいます。) まず最初に必ず、

use FileHandle;

と書き、その後で

method HANDLE EXPR

もしくは

HANDLE->method(EXPR)

を使います。

それぞれのメソッドは、ファイルハンドル属性の昔の値を返します。メソッドは それぞれ EXPR をとることができ、指定した場合には、問題の FileHandle 属性の新しい値を指定することになります。指定しない場合 には、多くのメソッドでは現在の値に対して何もしませんが、 autoflush() では 1 を指定されたものとします。

これらの変数の中には "read-only" として扱われるものもあります。つまり、 そういった変数に対して、直接にしろ、リファレンスを介して間接にしろ、代入 を行なおうとした場合には、実行時に例外処理が起動されます。

Variable: $ARG
Variable: $_
デフォルトの入力とパターン検索のスペース。以下の 2つは同値です:
while (<>) {...}    # while の中でだけ同値 !
while ($_ = <>) {...}

/^Subject:/
$_ =~ /^Subject:/

tr/a-z/A-Z/
$_ =~ tr/a-z/A-Z/

chop
chop($_)

(記憶法: 下線はある操作を覚えるためのもの。)

Variable: $<digit>
最後のパターンマッチで対応する括弧のサブパターンにマッチした文字列が入っ ているが、既に抜けてしまったブロックでのパターンマッチは勘定に入れない。 (記憶法: \digit のようなもの。)これらの変数はすべて read-only です。

Variable: $MATCH
Variable: $&
最後に成功したパターンマッチでマッチした文字列 (現在の BLOCK で囲まれた BLOCK や eval() で隠れている部分でのマッチは勘定に入れない)。(記憶法: あ るエディタの & ようなもの。) この変数は read-only です。

Variable: $PREMATCH
Variable: $`
最後の成功したパターンマッチ (現在のBLOCK で囲まれた BLOCK や eval() に隠れている部分でのマッチは勘定に入れない) でマッチした部 分の前の文字列。(記憶法: ` は多くの場合クォートされた文字列の前にある。) この変数は read-only です。

Variable: $POSTMATCH
Variable: $'
最後の成功したパターンマッチ (現在のBLOCK で囲まれたBLOCK や eval() に隠れている部分でのマッチは勘定に入れない) でマッチした部 分に続く文字列。(記憶法: ' は多くの場合クォートされた文字列の後にある。) 例:
$_ = 'abcdefghi';
/def/;
print "$`:$&:$'\n";         # abc:def:ghi と印字

この変数は read-only です。

Variable: $LAST_PAREN_MATCH
Variable: $+
最後に検索されたパターンの最後の括弧にマッチした文字列。これはいくつかの 選択肢の中でどれがマッチするのかわからないような場合に使うと便利です。た とえば:
/Version: (.*)|Revision: (.*)/ && ($rev = $+);

(記憶法: ポジティブで前向き。) この変数は read-only です。

Variable: $MULTILINE_MATCHING
Variable: $*
文字列中で複数行マッチを行なうために 1 に設定し、0 にすると、Perl が文字 列に 1 行しか無いと仮定して、ある種のパターンマッチに関する最適化を行な うようになります。複数の改行を含む文字列でのパターンマッチを "$*" が 0 のまま行なうと結果は信用のないものになります。デフォルトでは 0 になって います。(記憶法: * は複数のものにマッチします。)この変数は "^" と "$" の 解釈にのみ影響します。リテラルの改行文字は、$* が 0 であっても検索するこ とが可能です。

Perl 5 では "$*" を使わないようにしてください。

Method: input_line_number HANDLE EXPR
Variable: $INPUT_LINE_NUMBER
Variable: $NR
Variable: $.
最後に読み込みを行なったファイルハンドルの現在の入力行番号。この変数は、 read-only と考えるべきです。明示的にファイルハンドルをクローズした場合に だけ、行番号がリセットされることに注意してください。"<>" 構文では明示的 にクローズを行ないませんから、ARGV のファイルに跨って行番号が数えられる ことになります (が、eof() の例を参照してください)。(記憶法: 多く のプログラムで "." が現在行番号を示すように使われています。)

Method: input_record_separator HANDLE EXPR
Variable: $INPUT_RECORD_SEPARATOR
Variable: $RS
Variable: $/
入力レコードセパレータで、デフォルトでは改行文字。空文字列に設定されると、 空行を区切りとして扱うことを含めて、awk の変数 RS のように働きます。複数 文字の区切文字を示すために、文字列を設定することもできます。この変数に "\n\n" を設定すると、空行が続く場合において、"" を設定した場合とわずかに 違う動作をするようになります。"" を設定した場合には、複数の空行も 1 つの 空行であるかのように扱います。"\n\n" を設定した場合には、単純に次の文字 が (たとえ改行文字であっても)次の段落に含まれるものとして扱います。(記憶 法: / は、詩を引用するときに、行の区切りを示すのに使う文字です。)
undef $/;
$_ = <FH>;          # ファイル全体が読まれる
s/\n[ \t]+/ /g;

Method: autoflush HANDLE EXPR
Variable: $OUTPUT_AUTOFLUSH
Variable: $|
0 以外に設定されると、その時点で選択されている出力チャネルに write や print を行なうごとに、強制的にフラッシュします。デフォルトでは 0 となっ ています。STDOUT は通常では、端末への出力時には行バッファリング、それ以 外ではブロックバッファリングであることに注意してください。これは、Perl のスクリプトを rsh 配下で実行して、実行状況を確認したい場合のように、パ イプに出力するときに特に便利でしょう。(記憶法: パイプをホットな状態にし ておくために使う。)

Method: output_field_separator HANDLE EXPR
Variable: $OUTPUT_FIELD_SEPARATOR
Variable: $OFS
Variable: $,
print 演算子のための出力フィールドセパレータ。通常 print 演算子は、 コンマで区切って指定したフィールドを単純に印字します。より、awk に近い動 作をさせるには、フィールドの区切りとして印字されるものとして awk の変数 OFS に設定するものを、この変数に設定します。(記憶法: print 文で , を書い た場所に印字されるもの。)

Method: output_record_separator HANDLE EXPR
Variable: $OUTPUT_RECORD_SEPARATOR
Variable: $ORS
Variable: $\
print 演算子のための出力レコードセパレータ。通常print 演算 子は、コンマで区切って指定したフィールドを単純に印字し、改行などレコード セパレータと想定するものをつけません。より、awk に近い動作をさせるには、 print の最後に印字されるものとして awk の変数 ORS に設定するものを、 この変数に設定します。(記憶法: print の最後に \n を付け加える代わりに "$\" を設定する。また、/ に似通っているが、Perl から「バック」されるもの です。)

Variable: $LIST_SEPARATOR
Variable: $"
"$," と同様ですが、これは 2 重引用符で括られた文字列(または、同様に扱わ れる文字列) 内で配列値が展開される際に適用されます。デフォルトではスペー スになっています。(記憶法: 明らかでしょう。)

Variable: $SUBSCRIPT_SEPARATOR
Variable: $SUBSEP
Variable: $;
多次元配列のエミュレートのための添え字の区切文字。ハッシュの要素を
$foo{$a,$b,$c}

のようにして参照すると、実際には

$foo{join($;, $a, $b, $c)}

という意味になります。しかし、

@foo{$a,$b,$c}      # スライス -- @ に注意

としてはいけません。これは、

($foo{$a},$foo{$b},$foo{$c})

という意味になります。

デフォルトは "\034" で、awk の SUBSEP と同じです。使おうとしている key の値がバイナリのデータを含むならば、"$;" に設定する安全な値などはな いことになります。(記憶法: コンマ (構文上の添え字区切り文字) はセミ−セ ミコロンなのです。ええ、詭弁だとはわかってますが、"$," はもう既にもっと 重要な任務を持ってるんです。)

Perl 5 では「本物の」多次元配列を使うようにしてください。

Variable: $OFMT
Variable: $#
数字を印字する際の出力フォーマット。この変数は、不十分ではありますが、 awk の変数 OFMT をエミュレートしようとするものです。しかしながら、 awk と Perl は異なる記法で数値を表わしています。また、初期値は %.6gでは なく、%.20g となっていますので、awk での値を得るには、明示的に "$#" を設 定する必要があります。(記憶法: # は数値記号です。)

Perl 5 では "$#" を使わないようにしてください。

Method: format_page_number HANDLE EXPR
Variable: $FORMAT_PAGE_NUMBER
Variable: $%
その時点で選択されている出力チャネルの、その時点でのページ番号。(記憶法: % は、nroff でのページ番号です。)

Method: format_lines_per_page HANDLE EXPR
Variable: $FORMAT_LINES_PER_PAGE
Variable: $=
その時点で選択されている出力チャネルの、その時点でのページ長 (印字可能行 数)。デフォルトは 60 です。(記憶法: = には複数の水平線 (行) が含まれます。)

Method: format_lines_left HANDLE EXPR
Variable: $FORMAT_LINES_LEFT
Variable: $-
その時点で選択されている出力チャネルの、ページに残っている行数。(記憶法: "ページ行数" - "印字済み行数")

Method: format_name HANDLE EXPR
Variable: $FORMAT_NAME
Variable: $~
その時点で選択されている出力チャネルの、その時点でのフォーマット名。デフォ ルトでは、ファイルハンドルと同名。(記憶法: "$^" の兄弟。)

Method: format_top_name HANDLE EXPR
Variable: $FORMAT_TOP_NAME
Variable: $^
その時点で選択されている出力チャネルの、その時点でのページ先頭フォーマッ ト名。デフォルトでは、ファイルハンドル名に _TOP を続けたもの。(記憶法: ページの先頭へのポインタ。)

Method: format_line_break_characters HANDLE EXPR
Variable: $FORMAT_LINE_BREAK_CHARACTERS
Variable: $:
フォーマットの充填継続フィールド (^ で始まるもの) への文字列で行分割を許 す文字集合。デフォルトは " \n-"で空白か改行の後で行分割が可能となってい ます。(記憶法: 詩では「コロン」は、行の一部。)

Method: format_formfeed HANDLE EXPR
Variable: $FORMAT_FORMFEED
Variable: $^L
フォーマット出力で、改ページのために出力されるもの。デフォルトは \f。

Variable: $ACCUMULATOR
Variable: $^A
format 行のための、その時点での write() アキュムレータの値。 format には、$^A に結果を残す、formline() コマンドが含まれます。 自分のフォーマットを呼び出した後で、write() は $^A の内容を出力し てから消去します。したがって、自分で formline() を呼び出すのでな ければ、$^A の値が見えることはありません。See section フォーマット文,と See section 組み込み関数,の formline() の項を参照してください。

Variable: $CHILD_ERROR
Variable: $?
最後に close したパイプ、バッククォート (``) コマンド、 system() 演算子が返したステータス。このステータスワードは wait() システムコールが返したものですから、サブプロセスの exit 値 は、実際には ($? >> 8) であることに注意してください。つまり多くのシステ ムで$? & 255 は、もしあれば、そのプロセスを止めたシグナルとコアダンプが あるかどうかを示します。(記憶法: sh や ksh と同様。)

Variable: $OS_ERROR
Variable: $ERRNO
Variable: $!
数値コンテキストで用いられると、その時点の errno の値が (通常の注意事項 と供に) 得られます。(これは、システムエラーを示す特定のエラーが得られた 場合でもなければ、"$!" の値が、特に何かを示すものであると、頼ってはなら ないということです。)文字列コンテキストで使われると、対応するシステムエ ラーのメッセージ文字列が得られます。たとえば、"$!" にエラーの文字列を返 して欲しいならば、errno を設定するため、あるいは、die() 演算子の exit 値 を設定するために、"$!" へ代入を行なうことが可能です。(記憶法: 何が bang(!) したか。)

Variable: $EVAL_ERROR
Variable: $@
最後の eval() コマンドによる Perl の構文エラーメッセージです。空文字列で あれば、最後の eval() が正常に解析され、実行されたことになります (が、実 行した演算子が、通常の意味で失敗しているかもしれません)。(記憶法: どこで ("at" where) 構文エラーが起ったか。)

Variable: $PROCESS_ID
Variable: $PID
Variable: $$
スクリプトを実行している Perl のプロセス番号です。(記憶法: シェルと同じ。)

Variable: $REAL_USER_ID
Variable: $UID
Variable: $<
本プロセスの実 uid を示します。(記憶法: setuid で実行中であれば、そこ 「から」来た uid です。)

Variable: $EFFECTIVE_USER_ID
Variable: $EUID
Variable: $>
本プロセスの実効 uid を示します、例:
$< = $>;            # 実 uid に実効 uid を設定
($<,$>) = ($>,$<);  # 実 uid と実効 uid を交換

(記憶法: setuid で実行中であれば、そこ「へ」行く uidです。)"$<" と "$>" の交換は、setreuid() をサポートしているマシンでのみ可能です。

Variable: $REAL_GROUP_ID
Variable: $GID
Variable: $(
本プロセスの実 gid を示します。同時に複数のグループに所属できるマシンで は、所属するグループをスペースで区切ったリストが得られます。最初の数値は、 getgid() で返されるものです。その後に getgroups()が返す値が続き、その中 の 1 つは、最初の値と同じかもしれません。(記憶法: 括弧は、グループ化に使 われます。setgid で実行中であれば、実 gid は LEFT した、つまり離れたグルー プです。)

Variable: $EFFECTIVE_GROUP_ID
Variable: $EGID
Variable: $)
本プロセスの実効 gid を示します。同時に複数のグループに所属できるマシン では、所属するグループをスペースで区切ったリストが得られます。最初の数値 は、getegid() で返されるものです。その後に getgroups() が 返す値が続き、その中の 1 つは、最初の値と同じかもしれません。(記憶法: 括 弧は、グループ化に使われます。setgid で実行中であれば、実効 gid は RIGHT な、つまり正しいグループです。)

注: "$<"、"$>"、"$("、"$)" は、実行するマシンで、対応する set[re][ug]id() ルーティンがサポートされているときにのみ設定可能 です。"$(" と "$)" の交換は、setregid() がサポートされているマシ ンでのみ可能です。

Variable: $PROGRAM_NAME
Variable: $0
実行されている Perl スクリプトの、ファイル名を示します。"$0" に代入を行 なうと、ps(1) プログラムが覗く、引数エリアを修正します。実行しているプロ グラムを隠すよりは、実行中のプログラムの状態を表示するときに、使うとよい でしょう。(記憶法: sh や ksh と同じ。)

Variable: $[
配列の最初の要素や、文字列の最初の文字のインデクスを示します。デフォルト は 0 ですが、index() 関数や substr() 関数を評価するときに、 Perl の動作をより awk (や Fortran) に近づけるため、1 に設定することもで きます。(記憶法: [ は添え字付けの始め。)

Perl 5 では "$[" への代入は、コンパイラへのディレクティブとして扱われ、 他のファイルの動作に影響を与えることがなくなりました。この変数は使わない ようにしてください。

Variable: $PERL_VERSION
Variable: $]
`perl -v' としたときに表示される文字列を示します。スクリプトの最初 で、そのスクリプトを実行しているインタプリタのバージョンが適切な範囲内に あるかを調べる、といったことができます。数値コンテキストで使われると、 version + patchlevel / 1000 が返されます。例:
# ファイル名補完の確認 (5.000 ではバグ)
($version,$patchlevel) = $] =~ /(\d+\.\d+).*\nPatch level: (\d+)/;
print STDERR "(No filename completion available.)\n"
      if $version * 1000 + $patchlevel < 2016;

あるいは、数値的に

warn "No checksumming!\n" if $] < 3.019;

(記憶法: Perl のバージョンは、正しい範囲 (right bracket) にあるか。)

Variable: $DEBUGGING
Variable: $^D
デバッグフラグの現在の値を示します。(記憶法: `-D' スイッチの値。)

Variable: $SYSTEM_FD_MAX
Variable: $^F
システムが使用するファイル記述子の最大値を示し、通常は 2 です。システム ファイル記述子は、exec() されたプロセスに渡されますが、それ以降の ファイル記述子は渡されません。また、open() の実行中は、システムファ イル記述子は、たとえ open() が失敗しても、保存されます。(通常のファ イル記述子は、open() が実行される前にクローズされます。)ファイル 記述子の close-on-execのステータスは、exec 時ではなく、open 時の $^F の 値によって決められます。

Variable: $INPLACE_EDIT
Variable: $^I
置き換え編集の拡張子の値を示します。置き換え編集を禁止するためには、 undef を設定します。(記憶法: `-i' スイッチの値。)

Variable: $PERLDB
Variable: $^P
デバッガが自分自身をデバッグしないようにクリアする、内部フラグです。これ をクリアして、デバッグしないようにすることも考えられます。

Variable: $BASETIME
Variable: $^T
スクリプトを実行開始した時刻を、紀元 (1970) からの秒数で示したものです。 ファイルテスト -M, -A, -C で返される値は、この値に 基づいています。

Variable: $WARNING
Variable: $^W
警告スイッチの値で、真か偽が設定されます。(記憶法: `-w' スイッチに 関係します。)

Variable: $EXECUTABLE_NAME
Variable: $^X
Perl バイナリ自身が実行された時の名前を C の argv[0]から持ってきたもので す。

Variable: $ARGV
<> から読込みを行なっているとき、その時点のファイル名を示します。

Variable: @ARGV
配列 @ARGV は、コマンドラインからスクリプトに渡す引数が入れられます。 $ARGV[0] がコマンド名ではなく、最初の引数ですから、$#ARGV は一般には、引 数の個数 - 1となります。コマンド名については、"$0" を参照してください。

Variable: @INC
配列 @INC には、do EXPR, require, use によって評価 する Perl スクリプトを探す場所のリストが納められています。初期状態では、 コマンドラインスイッチ -I の引数とデフォルトの Perl ライブラリディレクト リ (おそらく"/usr/local/lib/perl5") とカレントディレクトリを表わす "." を順につなげたものです。

Variable: %INC
ハッシュ %INC は、dorequire によってインクルードされた、 個々のファイル名をエントリとして持っています。key は指定したファイル名で、 value は実際に見つかった場所となっています。require コマンドは、 指定されたファイル名が既にインクルードされているかを、この配列を使って調 べます。

Variable: $ENV{expr}
ハッシュ %ENV には、その時点の環境変数が設定されています。%ENV に値を設 定することで、チャイルドプロセスの環境変数を変更します。

Variable: $SIG{expr}
ハッシュ %SIG は、さまざまなシグナルのハンドラを設定するのに使用されます。 例:
sub handler {       # 第一引数はシグナル名
    local($sig) = @_;
    print "Caught a SIG$sig--shutting down\n";
    close(LOG);
    exit(0);
}

$SIG{'INT'} = 'handler';
$SIG{'QUIT'} = 'handler';
...
$SIG{'INT'} = 'DEFAULT';    # デフォルトに戻す
$SIG{'QUIT'} = 'IGNORE';    # SIGQUIT を無視する

配列 %SIG には、Perl スクリプト内で実際に設定されたシグナルに対する値だ けを保持しています。いくつか他にも例を示します:

$SIG{PIPE} = Plumber;       # やめて !!
$SIG{"PIPE"} = "Plumber";   # よい、main::Plumber を仮定
$SIG{"PIPE"} = \&Plumber;   # よい、現在の Plumber を仮定
$SIG{"PIPE"} = Plumber();   # え? Plumber() が返したもの?

「やめて」と書いたのは、裸の単語なので、問題となるからです。時には関数を 表現する文字列となりますが、時にはその時点、その場所で呼び出されるサブルー ティンコールとなるからです。確実にする最善の方法は、クォートするか、リファ レンスをとることです。*Plumber でもかまいません。See section サブルーティン,を 参照してください。


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

検索式: