PERLVAR(1) USER COMMANDS PERLVAR(1)
NAME
perlvar - Perl の定義済み変数
DESCRIPTION
定義済み名
以下の名前は Perl では特別な意味を持ちます。 記号的な名前の
多くは記憶法があるか、シェルでの類推が可能です。 それでも長
い名前を使用したい場合には
use English;
とプログラムの最初に書いてください。 これは、すべての短い名
前の別名として、カレントパッケージで長い名前を付けるものです。
awk から持ってきた中間的な名前を持っているものもあります。
もう一歩すすめて、現在選択されているファイルハンドルに依存す
る変数の場合には、代わりに FileHandle オブジェクトに関するオ
ブジェクトメソッドを呼び出して設定することができます。 (以下
の要約では HANDLE という語を含んでいます。) まず最初に必ず、
use FileHandle;
と書き、その後で
method HANDLE EXPR
もしくは
HANDLE->method(EXPR)
を使います。
それぞれのメソッドは、ファイルハンドル属性の昔の値を返します。
メソッドはそれぞれ EXPR をとることができ、指定した場合には、
問題の FileHandle 属性の新しい値を指定することになります。
指定しない場合には、多くのメソッドでは現在の値に対して何もし
ませんが、autoflush() では 1 を指定されたものとします。
これらの変数の中には "read-only" として扱われるものもありま
す。 つまり、そういった変数に対して、直接にしろ、リファレン
スを介して間接にしろ、代入を行なおうとした場合には、実行時に
例外処理が起動されます。
$ARG
$_ デフォルトの入力とパターン検索のスペース。 以下の 2
つは同値です:
while (<>) {...} # while の中でだけ同値 !
while ($_ = <>) {...}
Perl manpages Last change: Release 5.0 Patchlevel 00 1
PERLVAR(1) USER COMMANDS PERLVAR(1)
/^Subject:/
$_ =~ /^Subject:/
tr/a-z/A-Z/
$_ =~ tr/a-z/A-Z/
chop
chop($_)
(記憶法: 下線はある操作を覚えるためのもの。)
$<digit>
最後のパターンマッチで対応する括弧のサブパターンにマ
ッチした文字列が入っているが、既に抜けてしまったブロ
ックでのパターンマッチは勘定に入れない。 (記憶法:
\digit のようなもの。) これらの変数はすべて read-only
です。
$MATCH
$& 最後に成功したパターンマッチでマッチした文字列 (現在
の BLOCK で囲まれた BLOCK や eval() で隠れている部分
でのマッチは勘定に入れない)。 (記憶法: あるエディタ
の & ようなもの。) この変数は read-only です。
$PREMATCH
$` 最後の成功したパターンマッチ (現在のBLOCK で囲まれた
BLOCK や eval() に隠れている部分でのマッチは勘定に入
れない) でマッチした部分の前の文字列。 (記憶法: `
は多くの場合クォートされた文字列の前にある。) この変
数は read-only です。
$POSTMATCH
$' 最後の成功したパターンマッチ (現在のBLOCK で囲まれた
BLOCK や eval() に隠れている部分でのマッチは勘定に入
れない) でマッチした部分に続く文字列。 (記憶法: '
は多くの場合クォートされた文字列の後にある。) 例:
$_ = 'abcdefghi';
/def/;
print "$`:$&:$'\n"; # abc:def:ghi と印字
この変数は read-only です。
$LAST_PAREN_MATCH
$+ 最後に検索されたパターンの最後の括弧にマッチした文字
列。 これはいくつかの選択肢の中でどれがマッチするの
かわからないような場合に使うと便利です。 たとえば:
Perl manpages Last change: Release 5.0 Patchlevel 00 2
PERLVAR(1) USER COMMANDS PERLVAR(1)
/Version: (.*)|Revision: (.*)/ && ($rev = $+);
(記憶法: ポジティブで前向き。) この変数は read-only
です。
$MULTILINE_MATCHING
$* 文字列中で複数行マッチを行なうために 1 に設定し、0
にすると、Perl が文字列に 1 行しか無いと仮定して、あ
る種のパターンマッチに関する最適化を行なうようになり
ます。 複数の改行を含む文字列でのパターンマッチを
"$*" が 0 のまま行なうと結果は信用のないものになりま
す。 デフォルトでは 0 になっています。 (記憶法: *
は複数のものにマッチします。) この変数は "^" と "$"
の解釈にのみ影響します。 リテラルの改行文字は、$*
が 0 であっても検索することが可能です。
Perl 5 では "$*" を使わないようにしてください。
input_line_number HANDLE EXPR
$INPUT_LINE_NUMBER
$NR
$. 最後に読み込みを行なったファイルハンドルの現在の入力
行番号。 この変数は、read-only と考えるべきです。
明示的にファイルハンドルをクローズした場合にだけ、行
番号がリセットされることに注意してください。 "<>"
構文では明示的にクローズを行ないませんから、ARGV の
ファイルに跨って行番号が数えられることになります (が、
eof() の例を参照してください)。 (記憶法: 多くのプロ
グラムで "." が現在行番号を示すように使われています。)
input_record_separator HANDLE EXPR
$INPUT_RECORD_SEPARATOR
$RS
$/ 入力レコードセパレータで、デフォルトでは改行文字。
空文字列に設定されると、空行を区切りとして扱うことを
含めて、awk の変数 RS のように働きます。 複数文字の
区切文字を示すために、文字列を設定することもできます。
この変数に "\n\n" を設定すると、空行が続く場合におい
て、"" を設定した場合とわずかに違う動作をするように
なります。 "" を設定した場合には、複数の空行も 1 つ
の空行であるかのように扱います。 "\n\n" を設定した
場合には、単純に次の文字が (たとえ改行文字であっても)
次の段落に含まれるものとして扱います。 (記憶法: /
は、詩を引用するときに、行の区切りを示すのに使う文字
です。)
Perl manpages Last change: Release 5.0 Patchlevel 00 3
PERLVAR(1) USER COMMANDS PERLVAR(1)
undef $/;
$_ = <FH>; # ファイル全体が読まれる
s/\n[ \t]+/ /g;
autoflush HANDLE EXPR
$OUTPUT_AUTOFLUSH
$| 0 以外に設定されると、その時点で選択されている出力チ
ャネルに write や print を行なうごとに、強制的にフラ
ッシュします。 デフォルトでは 0 となっています。
STDOUT は通常では、端末への出力時には行バッファリン
グ、それ以外ではブロックバッファリングであることに注
意してください。 これは、Perl のスクリプトを rsh 配
下で実行して、実行状況を確認したい場合のように、パイ
プに出力するときに特に便利でしょう。 (記憶法: パイ
プをホットな状態にしておくために使う。)
output_field_separator HANDLE EXPR
$OUTPUT_FIELD_SEPARATOR
$OFS
$, print 演算子のための出力フィールドセパレータ。 通常
print 演算子は、コンマで区切って指定したフィールドを
単純に印字します。 より、awk に近い動作をさせるには、
フィールドの区切りとして印字されるものとして awk の
変数 OFS に設定するものを、この変数に設定します。
(記憶法: print 文で , を書いた場所に印字されるもの。)
output_record_separator HANDLE EXPR
$OUTPUT_RECORD_SEPARATOR
$ORS
$\ print 演算子のための出力レコードセパレータ。 通常
print 演算子は、コンマで区切って指定したフィールドを
単純に印字し、改行などレコードセパレータと想定するも
のをつけません。 より、awk に近い動作をさせるには、
print の最後に印字されるものとして awk の変数 ORS に
設定するものを、この変数に設定します。 (記憶法:
print の最後に \n を付け加える代わりに "$\" を設定す
る。 また、/ に似通っているが、Perl から「バック」
されるものです。)
$LIST_SEPARATOR
$" "$," と同様ですが、これは 2 重引用符で括られた文字列
Perl manpages Last change: Release 5.0 Patchlevel 00 4
PERLVAR(1) USER COMMANDS PERLVAR(1)
(または、同様に扱われる文字列) 内で配列値が展開され
る際に適用されます。 デフォルトではスペースになって
います。 (記憶法: 明らかでしょう。)
$SUBSCRIPT_SEPARATOR
$SUBSEP
$; 多次元配列のエミュレートのための添え字の区切文字。
ハッシュの要素を
$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 では「本物の」多次元配列を使うようにしてくだ
さい。
$OFMT
$# 数字を印字する際の出力フォーマット。 この変数は、不
十分ではありますが、awk の変数 OFMT をエミュレートし
ようとするものです。しかしながら、awk と Perl は異な
る記法で数値を表わしています。 また、初期値は %.6g
ではなく、%.20g となっていますので、awk での値を得る
には、明示的に "$#" を設定する必要があります。 (記
憶法: # は数値記号です。)
Perl 5 では "$#" を使わないようにしてください。
Perl manpages Last change: Release 5.0 Patchlevel 00 5
PERLVAR(1) USER COMMANDS PERLVAR(1)
format_page_number HANDLE EXPR
$FORMAT_PAGE_NUMBER
$% その時点で選択されている出力チャネルの、その時点での
ページ番号。 (記憶法: % は、nroff でのページ番号で
す。)
format_lines_per_page HANDLE EXPR
$FORMAT_LINES_PER_PAGE
$= その時点で選択されている出力チャネルの、その時点での
ページ長 (印字可能行数)。 デフォルトは 60 です。
(記憶法: = には複数の水平線 (行) が含まれます。)
format_lines_left HANDLE EXPR
$FORMAT_LINES_LEFT
$- その時点で選択されている出力チャネルの、ページに残っ
ている行数。 (記憶法: "ページ行数" - "印字済み行数")
format_name HANDLE EXPR
$FORMAT_NAME
$~ その時点で選択されている出力チャネルの、その時点での
フォーマット名。 デフォルトでは、ファイルハンドルと
同名。 (記憶法: "$^" の兄弟。)
format_top_name HANDLE EXPR
$FORMAT_TOP_NAME
$^ その時点で選択されている出力チャネルの、その時点での
ページ先頭フォーマット名。 デフォルトでは、ファイル
ハンドル名に _TOP を続けたもの。 (記憶法: ページの
先頭へのポインタ。)
format_line_break_characters HANDLE EXPR
$FORMAT_LINE_BREAK_CHARACTERS
$: フォーマットの充填継続フィールド (^ で始まるもの) へ
の文字列で行分割を許す文字集合。 デフォルトは " \n-"
で空白か改行の後で行分割が可能となっています。 (記
憶法: 詩では「コロン」は、行の一部。)
Perl manpages Last change: Release 5.0 Patchlevel 00 6
PERLVAR(1) USER COMMANDS PERLVAR(1)
format_formfeed HANDLE EXPR
$FORMAT_FORMFEED
$^L フォーマット出力で、改ページのために出力されるもの。
デフォルトは \f。
$ACCUMULATOR
$^A format 行のための、その時点での write() アキュムレー
タの値。 format には、$^A に結果を残す、formline()
コマンドが含まれます。 自分のフォーマットを呼び出し
た後で、write() は $^A の内容を出力してから消去しま
す。 したがって、自分で formline() を呼び出すのでな
ければ、$^A の値が見えることはありません。 perlform
manpage と perlfunc manpage の formline() の項を参照
してください。
$CHILD_ERROR
$? 最後に close したパイプ、バッククォート (``) コマン
ド、system() 演算子が返したステータス。 このステー
タスワードは wait() システムコールが返したものですか
ら、サブプロセスの exit 値は、実際には ($? >> 8) で
あることに注意してください。 つまり多くのシステムで
$? & 255 は、もしあれば、そのプロセスを止めたシグナ
ルとコアダンプがあるかどうかを示します。 (記憶法:
sh や ksh と同様。)
$OS_ERROR
$ERRNO
$! 数値コンテキストで用いられると、その時点の errno の
値が (通常の注意事項と供に) 得られます。 (これは、
システムエラーを示す特定のエラーが得られた場合でもな
ければ、"$!" の値が、特に何かを示すものであると、頼
ってはならないということです。) 文字列コンテキスト
で使われると、対応するシステムエラーのメッセージ文字
列が得られます。 たとえば、"$!" にエラーの文字列を
返して欲しいならば、errno を設定するため、あるいは、
die() 演算子の exit 値を設定するために、"$!" へ代入
を行なうことが可能です。 (記憶法: 何が bang(!) した
か。)
$EVAL_ERROR
$@ 最後の eval() コマンドによる Perl の構文エラーメッセ
ージです。 空文字列であれば、最後の eval() が正常に
解析され、実行されたことになります (が、実行した演算
子が、通常の意味で失敗しているかもしれません)。
Perl manpages Last change: Release 5.0 Patchlevel 00 7
PERLVAR(1) USER COMMANDS PERLVAR(1)
(記憶法: どこで ("at" where) 構文エラーが起ったか。)
$PROCESS_ID
$PID
$$ スクリプトを実行している Perl のプロセス番号です。
(記憶法: シェルと同じ。)
$REAL_USER_ID
$UID
$< 本プロセスの実 uid を示します。 (記憶法: setuid で
実行中であれば、そこ「から」来た uid です。)
$EFFECTIVE_USER_ID
$EUID
$> 本プロセスの実効 uid を示します、 例:
$< = $>; # 実 uid に実効 uid を設定
($<,$>) = ($>,$<); # 実 uid と実効 uid を交換
(記憶法: setuid で実行中であれば、そこ「へ」行く uid
です。) "$<" と "$>" の交換は、setreuid() をサポー
トしているマシンでのみ可能です。
$REAL_GROUP_ID
$GID
$( 本プロセスの実 gid を示します。 同時に複数のグルー
プに所属できるマシンでは、所属するグループをスペース
で区切ったリストが得られます。 最初の数値は、
getgid() で返されるものです。 その後に getgroups()
が返す値が続き、その中の 1 つは、最初の値と同じかも
しれません。 (記憶法: 括弧は、グループ化に使われま
す。 setgid で実行中であれば、実 gid は LEFT した、
つまり離れたグループです。)
$EFFECTIVE_GROUP_ID
$EGID
$) 本プロセスの実効 gid を示します。 同時に複数のグル
ープに所属できるマシンでは、所属するグループをスペー
スで区切ったリストが得られます。 最初の数値は、
getegid() で返されるものです。 その後に getgroups()
が返す値が続き、その中の 1 つは、最初の値と同じかも
しれません。 (記憶法: 括弧は、グループ化に使われま
Perl manpages Last change: Release 5.0 Patchlevel 00 8
PERLVAR(1) USER COMMANDS PERLVAR(1)
す。 setgid で実行中であれば、実効 gid は RIGHT な、
つまり正しいグループです。)
注: "$<"、"$>"、"$("、"$)" は、実行するマシンで、対
応する set[re][ug]id() ルーティンがサポートされてい
るときにのみ設定可能です。 "$(" と "$)" の交換は、
setregid() がサポートされているマシンでのみ可能です。
$PROGRAM_NAME
$0 実行されている Perl スクリプトの、ファイル名を示しま
す。 "$0" に代入を行なうと、ps(1) プログラムが覗く、
引数エリアを修正します。 実行しているプログラムを隠
すよりは、実行中のプログラムの状態を表示するときに、
使うとよいでしょう。 (記憶法: sh や ksh と同じ。)
$[ 配列の最初の要素や、文字列の最初の文字のインデクスを
示します。 デフォルトは 0 ですが、index() 関数や
substr() 関数を評価するときに、Perl の動作をより awk
(や Fortran) に近づけるため、1 に設定することもでき
ます。 (記憶法: [ は添え字付けの始め。)
Perl 5 では "$[" への代入は、コンパイラへのディレク
ティブとして扱われ、他のファイルの動作に影響を与える
ことがなくなりました。 この変数は使わないようにして
ください。
$PERL_VERSION
$] 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) にあるか。)
$DEBUGGING
$^D デバッグフラグの現在の値を示します。 (記憶法: -D ス
Perl manpages Last change: Release 5.0 Patchlevel 00 9
PERLVAR(1) USER COMMANDS PERLVAR(1)
イッチの値。)
$SYSTEM_FD_MAX
$^F システムが使用するファイル記述子の最大値を示し、通常
は 2 です。 システムファイル記述子は、exec() された
プロセスに渡されますが、それ以降のファイル記述子は渡
されません。 また、open() の実行中は、システムファ
イル記述子は、たとえ open() が失敗しても、保存されま
す。 (通常のファイル記述子は、open() が実行される前
にクローズされます。) ファイル記述子の close-on-exec
のステータスは、exec 時ではなく、open 時の $^F の値
によって決められます。
$INPLACE_EDIT
$^I 置き換え編集の拡張子の値を示します。 置き換え編集を
禁止するためには、undef を設定します。 (記憶法: -i
スイッチの値。)
$PERLDB
$^P デバッガが自分自身をデバッグしないようにクリアする、
内部フラグです。 これをクリアして、デバッグしないよ
うにすることも考えられます。
$BASETIME
$^T スクリプトを実行開始した時刻を、紀元 (1970) からの秒
数で示したものです。 ファイルテスト -M、-A、-C で返
される値は、この値に基づいています。
$WARNING
$^W 警告スイッチの値で、真か偽が設定されます。 (記憶法:
-w スイッチに関係します。)
$EXECUTABLE_NAME
$^X Perl バイナリ自身が実行された時の名前を C の argv[0]
から持ってきたものです。
$ARGV <> から読込みを行なっているとき、その時点のファイル
名を示します。
@ARGV 配列 @ARGV は、コマンドラインからスクリプトに渡す引
数が入れられます。 $ARGV[0] がコマンド名ではなく、
最初の引数ですから、$#ARGV は一般には、引数の個数 -1
となります。 コマンド名については、"$0" を参照して
Perl manpages Last change: Release 5.0 Patchlevel 00 10
PERLVAR(1) USER COMMANDS PERLVAR(1)
ください。
@INC 配列 @INC には、do EXPR、require、use によって評価す
る Perl スクリプトを探す場所のリストが納められていま
す。 初期状態では、コマンドラインスイッチ -I の引数
とデフォルトの Perl ライブラリディレクトリ (おそらく
"/usr/local/lib/perl5") とカレントディレクトリを表わ
す "." を順につなげたものです。
%INC ハッシュ %INC は、do や require によってインクルード
された、個々のファイル名をエントリとして持っています。
key は指定したファイル名で、value は実際に見つかった
場所となっています。 require コマンドは、指定された
ファイル名が既にインクルードされているかを、この配列
を使って調べます。
$ENV{expr}
ハッシュ %ENV には、その時点の環境変数が設定されてい
ます。 %ENV に値を設定することで、チャイルドプロセ
スの環境変数を変更します。
$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 で
もかまいません。 perlsub manpage を参照してください。
Perl manpages Last change: Release 5.0 Patchlevel 00 11