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 は、
do
や require
によってインクルードされた、
個々のファイル名をエントリとして持っています。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.