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 以外に設定されると、その時点で選択されている出力チ
             ャネルに writeprint を行なうごとに、強制的にフラ
             ッシュします。 デフォルトでは 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、requireuse によって評価す
             る Perl スクリプトを探す場所のリストが納められていま
             す。 初期状態では、コマンドラインスイッチ -I の引数
             とデフォルトの Perl ライブラリディレクトリ (おそらく
             "/usr/local/lib/perl5") とカレントディレクトリを表わ
             す "." を順につなげたものです。

     %INC    ハッシュ %INC は、dorequire によってインクルード
             された、個々のファイル名をエントリとして持っています。
             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