これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド perlvar です。
プログラム:
NAME
perlvar - Perl の事前定義変数
DESCRIPTION
この 構文 of 変数 名
Perl の変数名にはいくつかの形式があります。 通常、文字で始める必要があります
またはアンダースコア。この場合、任意の長さにすることができます (内部制限は 251 まで)
文字)、文字、数字、アンダースコア、または特殊なシーケンス「::」を含めることができます。
「」。 この場合、最後の「::」または「'」より前の部分は、 パッケージ
資格; perlmod を参照してください。
Perl 変数名は、一連の数字、単一の句読点、またはコントロールである場合もあります。
文字 (リテラル制御文字形式は非推奨になりました)。 これらの名前はすべて
Perl による特別な使用のために予約されています。 たとえば、すべて数字の名前はデータを保持するために使用されます。
正規表現の一致後に後方参照によって取得されます。 Perl には特別な構文があります
単一制御文字名の場合: 「^X」 (キャレット「X」) は、
コントロール「X」文字。 たとえば、$^W (ドル記号キャレット「W」) という表記は、
名前が XNUMX 文字のコントロール「W」であるスカラー変数。 これよりも優れています
リテラルのコントロール「W」をプログラムに入力します。
Perl v5.6.0 以降、Perl 変数名はキャレットで始まる英数字文字列である可能性があります。
(または制御文字ですが、この形式は非推奨です)。 これらの変数は次の場所に書き込む必要があります。
「${^Foo}」という形式。 中括弧はオプションではありません。 「${^Foo}」はスカラー変数を示します
その名前は、コントロール「F」の後に XNUMX つの「o」が続いたものです。 これらの変数は次のために予約されています
「^_」で始まるものを除く、Perl による将来の特別な使用 (コントロール-アンダースコア)
またはキャレットアンダースコア)。 「^_」で始まる制御文字名は取得されません。
Perl の将来のバージョンでは特別な意味を持ちます。 したがって、そのような名前は安全に使用できます。
プログラム。 ただし、$^_ 自体は、 is 予約済み。
数字、制御文字、または句読点文字で始まる Perl 識別子は、
「パッケージ」宣言の効果から免除され、常に強制的に含まれます。
パッケージ「メイン」; また、「strict 'vars'」エラーからも免除されます。 他にもいくつか名前がありますが、
次の方法でも免除されます。
環境標準入力
INC標準出力
ARGV標準誤差
ARGVOUT
SIG
特に、特殊な "${^_XYZ}" 変数は常にパッケージ "main" 内にあるものとみなされます。
現在スコープ内にある「パッケージ」宣言に関係なく。
特殊 変数
次の名前は Perl にとって特別な意味を持ちます。 ほとんどの句読点名には合理的な名前が付けられています。
ニーモニック、またはシェル内の類似物。 それでも、long 変数を使用したい場合は、
名前を指定する場合は、次のように言うだけで済みます。
英語を使う;
プログラムの先頭に。 これにより、すべての短い名前が、
現在のパッケージ。 中にはミディアムネームが付いているものもあり、一般的には以下から借用したものです。 awk。 詳細について
情報については、英語を参照してください。
続行する前に、変数の並べ替え順序に注意してください。 一般に、最初にリストします。
変数は大文字と小文字が区別されず、ほぼ辞書順に並べられます (「{」または「^」は無視されます)。
"${^UNICODE}" や $^T のように、先行する単語)、ただし、$_ と @_ は先頭に移動します。
パイル。 同じ識別子を持つ変数については、スカラー、配列、ハッシュ、
そして裸語。
Variables
$ARG
$_ デフォルトの入力およびパターン検索スペース。 以下のペアは、
同等:
while (<>) {...} # while でのみ同等です!
while (定義($_ = <>)) {...}
/^件名:/
$_ =~ /^件名:/
tr/az/AZ/
$_ =~ tr/az/AZ/
ムシャムシャ食べる
むしゃむしゃ($_)
Perl が $_ を使用しない場合でも $_ を想定する場所は次のとおりです。
· 次の関数は、デフォルトの引数として $_ を使用します。
abs、アラーム、chomp、chop、chr、chroot、cos、定義済み、eval、evalbytes、exp、fc、
glob、hex、int、lc、lcfirst、length、log、lstat、mkdir、oct、ord、pos、print、
printf、quotemeta、readlink、readpipe、ref、require、reverse (スカラーコンテキスト内)
のみ)、rmdir、たとえば、sin、split (第 XNUMX 引数の場合)、sqrt、stat、study、uc、
ucfirst、リンク解除、アンパック。
· 「-t」を除くすべてのファイル テスト (「-f」、「-d」)。デフォルトは STDIN です。 「-X」を参照してください。
ペルファンクで
· パターン マッチング操作「m//」、「s///」、「tr///」(別名「y///」)
「=~」演算子なしで使用されます。
· 他に変数がない場合の「foreach」ループ内のデフォルトの反復子変数
供給。
· 「grep()」および「map()」関数の暗黙的なイテレータ変数。
· 「given()」の暗黙変数。
· 「」の場合に次の値または入力レコードを配置するデフォルトの場所。 "、
「readline」、「readdir」、または「each」操作の結果は、それ自体でテストされます。
「while」テストの唯一の基準。 「while」テスト以外では、これは行われません。
起こる。
$_ はデフォルトではグローバル変数です。 ただし、perl v5.10.0 では、
$_ の字句バージョンをファイル内で宣言するか、「my」を使用してブロック内で宣言します。
さらに、「our $_」を宣言すると、現在のスコープでグローバル $_ が復元されます。 けれど
これは導入された当時は良いアイデアのように思えましたが、実際には字句 $_ です。
解決するよりも多くの問題を引き起こします。 期待される関数を呼び出すと、
$_ 経由で渡される情報は、関数の動作方法に応じて機能する場合と機能しない場合があります。
と書かれていますが、これを解決する簡単な方法はありません。 字句 $_ は避けてください。
特に自虐的な気分でない限り。 このため、字句 $_ は
まだ実験段階のため、警告が無効になっていない限り警告が生成されます。
他の実験的な機能と同様、字句 $_ の動作は以下の影響を受けます。
致命的なエラーへの変更を含む、予告なく変更する場合があります。
ニーモニック: 下線は特定の操作で理解されます。
@ARG
@_ サブルーチン内では、配列 @_ にはサブルーチンに渡されるパラメータが含まれます。
サブルーチン。 サブルーチン内では、@_ が配列演算子のデフォルトの配列です。
「ポップ」と「シフト」。
perlsubを参照してください。
$LIST_SEPARATOR
$" 配列または配列スライスが二重引用符で囲まれた文字列または
「/.../」などの同様のコンテキストの場合、その要素はこの値で区切られます。
デフォルトはスペースです。 たとえば、これは次のとおりです。
print "配列は: @array\n";
これと同等です:
print "配列は次のとおりです: " . join($", @array) . "\n";
ニーモニック: 二重引用符で囲まれたコンテキストで機能します。
$PROCESS_ID
$ PID
$$ このスクリプトを実行する Perl のプロセス番号。 あなたなのに できる これを設定します
変数が変化するため、これは一般的に推奨されませんが、
いくつかのテスト目的。 これは、「fork()」呼び出し間で自動的にリセットされます。
Linux および Debian GNU/kFreeBSD ユーザーへの注意: Perl v5.16.0 より前は、perl は
LinuxThreads を使用して、Linux システム上で POSIX セマンティクスをエミュレートします。
その後ネイティブ POSIX に置き換えられた POSIX スレッドの実装
スレッド ライブラリ (NPTL)。
LinuxThreads は現在 Linux では廃止されており、このように「getpid()」をキャッシュすることで
Perl の埋め込みは不必要に複雑になります (手動で更新する必要があるため)
$$ の値) なので、$$ と "getppid()" は常に同じ値を返すようになります。
基礎となる C ライブラリ。
Debian GNU/kFreeBSD システムも、6.0 までは LinuxThreads を使用していました。
リリースされましたが、その後、POSIX に似た FreeBSD スレッド セマンティクスに移行しました。
システムがこの不一致の影響を受けるかどうかを確認するには、「getconf
GNU_LIBPTHREAD_VERSION | grep -q NPTL" は false 値を返します。NTPL スレッド
POSIX セマンティクスを維持します。
ニーモニック: シェルと同じ。
$PROGRAM_NAME
$0 実行中のプログラムの名前が含まれます。
一部の (すべてではない) オペレーティング システムでは、$0 に代入すると引数領域が変更されます。
「ps」プログラムが認識するもの。 一部のプラットフォームでは、特別な「ps」を使用する必要がある場合があります。
オプションまたは別の「ps」を使用して変更を確認します。 $0 を変更するとより便利です
プログラムを隠すためではなく、現在のプログラムの状態を示す方法として
あなたは走っています。
$0 の最大長にはプラットフォーム固有の制限があることに注意してください。 で
最も極端なケースでは、元の $0 が占有するスペースに制限される可能性があります。
一部のプラットフォームでは、スペースなどの任意の量のパディングが存在する場合があります。
「ps」で示されるように、変更された名前の後に文字が続きます。 一部のプラットフォームではこれ
パディングは引数領域の元の長さまで拡張できますが、いいえ
何をするかは関係ありません (これは、たとえば Linux 2.2 の場合です)。
BSD ユーザーへの注意: $0 を設定しても、「perl」が完全に削除されるわけではありません。 ps(1)
出力。 たとえば、$0 を「foobar」に設定すると、「perl: foobar (perl)」という結果になる可能性があります。
(「perl:」プレフィックスと「(perl)」サフィックスの両方が表示されるかどうかは、
正確な BSD バリアントとバージョン)。 これはオペレーティング システムの機能、Perl です。
仕方が無い。
マルチスレッド スクリプトでは、Perl がスレッドを調整して、どのスレッドでも実行できるようにします。
$0 のコピーを変更すると、その変更が見えるようになります。 ps(1) (次のように仮定します)
オペレーティング システムも動作します)。 他のスレッドが持つ $0 のビューに注意してください。
彼らは独自のコピーを持っているため、変更されません。
プログラムがスイッチ「-e」または「-E」を介して perl に与えられた場合、$0 は
文字列「-e」が含まれています。
Perl v5.14.0 以降の Linux では、レガシー プロセス名は次のように設定されます。 prctl(2)、で
Perl のバージョン以降で行われているように、「argv[0]」を介して POSIX 名を変更することに加えて
4.000。 ps、top、などの従来のプロセス名を読み取るシステム ユーティリティが追加されました。
killall は、$0 に割り当てるときに設定した名前を認識します。 あなたが持つ文字列
供給は 16 バイトで遮断されます。これは Linux によって課された制限です。
ニーモニック: と同じ sh と kshの.
$REAL_GROUP_ID
$GID
$( このプロセスの実際の gid。メンバーシップをサポートするマシンを使用している場合は、
複数のグループを同時に指定すると、所属しているグループのスペース区切りのリストが表示されます。
最初の数値は「getgid()」によって返される数値であり、その後の数値は「getgid()」によって返される数値です。
「getgroups()」。その XNUMX つは最初の番号と同じである可能性があります。
ただし、$( に割り当てられる値は、実際の GID の設定に使用される単一の数値である必要があります。
したがって、 $( で与えられる値は次のようになります。 強制されずに $( に戻される
ゼロを追加するなどして数値を入力します。 これは有効な GID とは異なることに注意してください
($)) はリストを受け取ります。
次を使用すると、実際の GID と実効 GID の両方を同時に変更できます。
「POSIX::setgid()」。 $( への変更には、可能性のあるものを検出するために $! へのチェックが必要です
変更を試みた後のエラー。
ニーモニック: 括弧は次の目的で使用されます。 グループヘッド もの。 本当の gid はあなたのグループです
左、setgidを実行している場合。
$EFFECTIVE_GROUP_ID
$EGID
$) このプロセスの実効 GID。 をサポートするマシンを使用している場合
複数のグループのメンバーシップを同時に指定すると、スペースで区切られたリストが表示されます。
最初の数値は「getegid()」によって返された数値であり、
"getgroups()" による後続のもの。そのうちの XNUMX つは最初のものと同じである可能性があります。
数。
同様に、$) に割り当てられる値も、スペースで区切られた数値のリストでなければなりません。
最初の数値は有効な GID を設定し、残りは (存在する場合) に渡されます。
「setgroups()」。 「setgroups()」の空のリストの効果を得るには、単に繰り返します
新しい有効な GID。 つまり、有効な gid を 5 に強制し、有効な gid を強制します。
空の「setgroups()」リスト。「 $) = "5 5" とします。
次を使用すると、実効 GID と実際の GID の両方を同時に変更できます。
「POSIX::setgid()」 (数値引数を XNUMX つだけ使用します)。 $) への変更には、
$にチェックしてください! 変更を試みた後に発生する可能性のあるエラーを検出します。
$<、$>、$(、および $) は、対応する機能をサポートするマシンでのみ設定できます。
set[re][ug]id() ルーティーン。 $( と $) は、サポートされているマシンでのみ交換できます。
「setregid()」。
ニーモニック: 括弧は次の目的で使用されます。 グループヘッド もの。 有効な gid はグループです
右 setgid を実行している場合。
$REAL_USER_ID
$UID
$< このプロセスの実 UID。 実際の UID と有効な UID の両方を変更できます。
「POSIX::setuid()」を使用して同時に uid を取得します。 $< への変更には
システムコール、$をチェックしてください! 変更後、考えられるエラーの検出を試みます。
ニーモニック: それはあなたが来た UID です fromsetuid を実行している場合。
$EFFECTIVE_USER_ID
$EUID
$> このプロセスの実効 UID。 例えば:
$< = $>; # 実数を有効な UID に設定します
($<,$>) = ($>,$<); # 実際のUIDと有効なUIDを交換する
次を使用すると、実効 UID と実際の UID の両方を同時に変更できます。
「POSIX::setuid()」。 $> を変更するには、$! にチェックを入れる必要があります。 あらゆる可能性を検出するために
変更を試みた後のエラー。
$< と $> は、「setreuid()」をサポートするマシンでのみ交換できます。
ニーモニック: それはあなたが行ったUIDです 〜へsetuid を実行している場合。
$SUBSCRIPT_SEPARATOR
$サブセップ
$; 多次元配列エミュレーションの添字区切り文字。 を参照すると、
ハッシュ要素として
$foo{$x,$y,$z}
それは本当に意味します
$foo{参加($;, $x, $y, $z)}
でも置かないでください
@foo{$x,$y,$z} # スライス -- @ に注意してください
つまり、
($foo{$x}、$foo{$y}、$foo{$z})
デフォルトは「\034」で、 awk。 キーにバイナリデータが含まれている場合
$; には安全な値がない可能性があります。
perllol で説明されているように、「実際の」多次元配列の使用を検討してください。
ニーモニック: カンマ (構文上の添字区切り文字) はセミセミコロンです。
$a
$b 「sort()」を使用する場合の特別なパッケージ変数。perlfunc の「sort」を参照してください。 のため
この特殊性 $a と $b を宣言する必要はありません (「use vars」を使用するか、
「our()」)「strict 'vars'」プラグマを使用している場合でも同様です。 それらを語彙化しないでください
「sort()」比較で使用できるようにしたい場合は、「my $a」または「my $b」
ブロックまたは関数。
%ENV ハッシュ %ENV には現在の環境が含まれます。 「ENV」の設定値が変更される
子プロセスの環境は、その後「fork()」オフになります。
v5.18.0 では、%ENV に格納されているキーと値の両方が文字列化されています。
私の$foo= 1;
$ENV{'bar'} = \$foo;
if( ref $ENV{'bar'} ) {
「5.18.0 より前の動作」と言います。
場合} else {
「5.18.0 以降の動作」と言います。
}
以前は、子プロセスのみが文字列化された値を受け取りました。
私の$foo= 1;
$ENV{'bar'} = \$foo;
# 常に「non ref」を出力します
システム($^X, '-e',
q/print ( ref $ENV{'bar'} ? 'ref' : 'non ref' ) /);
これは、実際には任意のデータ構造を外部と共有できないために発生します。
プロセス。
$OLD_PERL_VERSION
$] Perl インタープリターのリビジョン、バージョン、およびサブバージョン。
5.XXXYYY 形式の 1 進数。XXX はバージョン / 3eXNUMX、YYY はバージョンです。
転覆/1e6。 たとえば、Perl v5.10.1 は「5.010001」になります。
この変数は、Perl インタープリターが
スクリプトは正しいバージョンの範囲内にあります。
$] lt '5.008' の場合、「PerlIO はありません!\n」と警告します。
$] を比較する場合、文字列比較演算子は次のようになります。 非常に 推奨されるを選択します。
バイナリ浮動小数点表現の固有の制限により、場合によっては次のような問題が発生する可能性があります。
一部のアーキテクチャでは、一部の数値の比較が正しくありません。
便利な機能については、「use VERSION」および「require VERSION」のドキュメントも参照してください。
実行中の Perl インタープリターが古すぎる場合に失敗する方法。
Perl バージョンのバージョン オブジェクトとしての表現については、「$^V」を参照してください。
より柔軟な文字列比較が可能になります。
$] の $^V に対する主な利点は、どのバージョンでも同じように動作することです。
パール。 欠点は、他のバージョンと簡単に比較できないことです。
形式 (リテラル v 文字列、「v1.2.3」、またはバージョン オブジェクトなど) および数値
比較は時々失敗することがあります。 文字列リテラルのバージョンチェックに適しています。
健全性チェックが行われていない変数と比較するには不適切です。
$OLD_PERL_VERSION フォームは歴史的な理由から Perl v5.20.0 に追加されましたが、
その使用は推奨されません。 ($] を使用する理由が古い Perl でコードを実行することである場合は、
これを $OLD_PERL_VERSION として参照するのは自滅的です)。
ニーモニック: Perl のこのバージョンは右括弧内にありますか?
$SYSTEM_FD_MAX
$^F システム ファイル記述子の最大数、通常は 2。システム ファイル記述子は次のとおりです。
「exec()」処理されたプロセスには渡されますが、上位のファイル記述子は渡されません。 また、
「open()」中、システム ファイル記述子は「open()」が実行されても保持されます。
失敗します (通常のファイル記述子は、「open()」が試行される前に閉じられます)。
ファイル記述子の close-on-exec ステータスは、次に従って決定されます。
時間ではなく、対応するファイル、パイプ、またはソケットが開かれたときの $^F の値
「exec()」の。
@F 配列 @F には、自動分割モードが有効な場合に読み取られる各行のフィールドが含まれます。
オン。 詳細については perlrun を参照してください。 -a スイッチ。 この配列はパッケージ固有のものであり、
実行時にパッケージ main にない場合は、宣言するか、完全なパッケージ名を指定する必要があります
「厳密な 'vars'」の下。
@INC 配列 @INC には、「EXPR を行う」、「要求する」、または「使用する」場所のリストが含まれます。
コンストラクトはライブラリ ファイルを探します。 最初は引数で構成されます
任意に -I コマンドライン スイッチ、その後にデフォルトの Perl ライブラリ、おそらく
/usr/local/lib/perlの後に「.」が続き、現在のディレクトリを表します。 (「。」
「-T」または「-t」によって汚染チェックが有効になっている場合は追加されません。)
これを実行時に変更する必要がある場合は、「use lib」プラグマを使用して、
マシン依存ライブラリも適切にロードされます。
lib '/mypath/libdir/' を使用します。
SomeMod を使用します。
Perl コードを挿入することで、ファイル インクルード システムにフックを挿入することもできます。
@INC に直接送信します。 これらのフックは、サブルーチン参照、配列参照、または
祝福されたオブジェクト。 詳細については、perlfunc の「require」を参照してください。
%INC ハッシュ %INC には、「do」、「require」、「do」を介して含まれる各ファイル名のエントリが含まれます。
または演算子を「使用」します。 キーは指定したファイル名です (モジュール名も含めて)
パス名に変換されます)、値は見つかったファイルの場所です。 の
「require」演算子は、このハッシュを使用して、特定のファイルが
すでに含まれています。
ファイルがフック (サブルーチン参照など) を介してロードされた場合は、「require」を参照してください。
これらのフックの説明については、perlfunc を参照してください)、このフックはデフォルトで次の場所に挿入されます。
ファイル名の代わりに %INC を使用します。 ただし、フックによって %INC が設定されている可能性があることに注意してください。
エントリを単独で使用すると、より具体的な情報が提供されます。
$INPLACE_EDIT
$^I インプレース編集拡張機能の現在の値。 インプレースを無効にするには「undef」を使用します
編集。
ニーモニック: の値 -i スイッチ。
$^M デフォルトでは、メモリ不足はトラップ不可能な致命的なエラーです。 ただし、
適切に構築されていれば、Perl は $^M の内容を緊急メモリ プールとして使用できます。
「死ね()」。 Perl が「-DPERL_EMERGENCY_SBRK」でコンパイルされたと仮定します。
Perlのmallocを使用しました。 それから
$^M = 'a' x (1 << 16);
緊急時に使用するために 64K バッファを割り当てます。 を参照してください。 INSTALL 内のファイル
カスタム C コンパイル フラグを追加する方法については、Perl ディストリビューションを参照してください。
Perlをコンパイルしています。 この高度な機能をカジュアルに使用しないようにするために、
この変数の英語の長い名前。
この変数は Perl 5.004 で追加されました。
$OSNAME
$^O Perl のこのコピーが構築されたオペレーティング システムの名前。
構成プロセス中に決定されます。 例については、「プラットフォーム」を参照してください。
perlport。
値は $Config{'osname'} と同じです。 「構成」および「 -V コマンド-
行スイッチは perlrun に文書化されています。
Windows プラットフォームでは、$^O はあまり役に立ちません。常に "MSWin32" であるため、
95/98/ME/NT/2000/XP/CE/.NET の違いはわかりません。 使用
「Win32::GetOSName()」または Win32::GetOSVersion() (Win32 と perlport を参照)
バリアントを区別します。
この変数は Perl 5.003 で追加されました。
%SIG ハッシュ %SIG には、シグナルのシグナル ハンドラーが含まれています。 例えば:
サブハンドラ { # 第一引数はシグナル名
my($sig) = @_;
print "SIG$sig をキャッチしました -- シャットダウンします\n";
閉じる(LOG);
終了する(0);
}
$SIG{'INT'} = \&handler;
$SIG{'QUIT'} = \&handler;
...
$SIG{'INT'} = 'デフォルト'; # デフォルトのアクションを復元する
$SIG{'QUIT'} = '無視'; # SIGQUITを無視する
「IGNORE」の値を使用すると、通常、シグナルを無視する効果があります。
「CHLD」信号の場合。 この特殊なケースの詳細については、perlipc を参照してください。
その他の例をいくつか示します。
$SIG{"パイプ"} = "配管工"; # main::Plumber を想定します (そうではありません)
# 推奨)
$SIG{"PIPE"} = \&配管工; # 大丈夫です; 現在の状態を仮定します
#配管工
$SIG{"PIPE"} = *配管工; # やや難解
$SIG{"PIPE"} = 配管工(); # おっと、Plumber() は何をしましたか
# 戻る??
シグナル ハンドラーの名前としてベアワードを使用しないでください。
思わず電話してしまう。
システムに「sigaction()」関数がある場合、シグナル ハンドラーがインストールされます。
それを使って。 これは、信頼性の高い信号処理が得られることを意味します。
Perl v5.8.0 では、シグナルのデフォルトの配信ポリシーが即時から変更されました (また、
「安全でない」と呼ばれます) から延期され、「安全な信号」とも呼ばれます。 perlipc を参照してください。
詳しくは。
特定の内部フックは、%SIG ハッシュを使用して設定することもできます。 指示されたルーチン
$SIG{__WARN__} は、警告メッセージが出力されようとしているときに呼び出されます。 の
警告メッセージが最初の引数として渡されます。 「__WARN__」の存在
フックにより、「STDERR」への通常の警告の出力が抑制されます。 あなた
これを使用して警告を変数に保存したり、警告を致命的なエラーに変換したりできます。
このような:
ローカル $SIG{__WARN__} = サブ { die $_[0] };
eval $proggie;
「IGNORE」フックは「__WARN__」ではサポートされていないため、警告を無効にすることができます
空のサブルーチンを使用します。
ローカル $SIG{__WARN__} = サブ {};
$SIG{__DIE__} で示されるルーチンは、致命的な例外が発生したときに呼び出されます。
投げられること。 エラーメッセージは最初の引数として渡されます。 とき
「__DIE__」フック ルーチンが戻り、例外処理は通常どおり続行されます。
フックが存在しない場合、フック ルーチン自体が「goto」経由で終了しない限り、
&sub"、ループ終了、または "die()"。"__DIE__" ハンドラーは明示的に無効になっています。
呼び出し中に、「__DIE__」ハンドラーによって死亡する可能性があります。 同様に、
「__警告__」。
実装の不具合により、 $SIG{__DIE__} フックが内部でも呼び出されます。
「eval()」。 $@ の保留中の例外を書き換えたり、奇妙な例外として書き換えたりするためにこれを使用しないでください。
「CORE::GLOBAL::die()」をオーバーライドする代わりに使用します。 この奇妙な行動は、
将来のリリースでは距離が修正され、次の場合にのみ $SIG{__DIE__} が呼び出される可能性があります。
本来の目的どおり、プログラムは終了しようとしています。 それ以外の用途は
非推奨。
「__DIE__」/「__WARN__」ハンドラーは、ある点で非常に特殊です。
パーサーによって検出された (可能性のある) エラーを報告します。 このような場合、パーサーは次のようになります。
矛盾した状態にあるため、そのようなハンドラーから Perl コードを評価しようとすると
おそらくセグメンテーション違反が発生するでしょう。 これは、次のような警告またはエラーが発生することを意味します。
Perl の解析結果は、次のように細心の注意を払って使用する必要があります。
$^S が定義されている場合は Carp が必要です。
Carp::confess("何か間違っている") 定義されている場合 &Carp::confess;
die 「何か問題がありましたが、Carp をロードできませんでした」
。 "バックトレース...\n\t"
。 "バックトレースを確認するには、-MCarp スイッチを使用して Perl を起動してみてください";
ここで最初の行は「Carp」をロードします。 ない限り、 を呼び出したのはパーサーです
ハンドラ。 XNUMX 行目はバックトレースを出力し、「Carp」が使用可能な場合は終了します。
XNUMX 行目は、「Carp」が使用できない場合にのみ実行されます。
例外ハンドラーの $^S 変数についてさえ考慮する必要があるのは、単純なことです。
間違っている。 現在実装されている $SIG{__DIE__} は、悲惨で困難な事態を招きます。
エラーを追跡します。 これを避け、「END{}」または CORE::GLOBAL::die オーバーライドを使用してください
を代わりにお使いください。
perlfunc の「die」、perlfunc の「warn」、perlfunc の「eval」、および次の警告を参照してください。
追加情報。
$BASETIME
$^T プログラムの実行が開始された時刻 (エポック (開始時) からの秒数)
1970年)。 によって返される値は、 -M, -A, -C ファイルテストはこれに基づいています
の値です。
$PERL_VERSION
$^V Perl インタプリタのリビジョン、バージョン、およびサブバージョン。
バージョンオブジェクト。
この変数は perl v5.6.0 で初めて登場しました。 以前のバージョンの Perl では、
未定義の値。 Perl v5.10.0 より前では、$^V はむしろ v-string として表現されていました。
バージョンオブジェクトよりも。
$^V を使用すると、スクリプトを実行している Perl インタープリターが実行されているかどうかを判断できます。
適切な範囲のバージョン。 例えば:
!$^V または $^V lt v5.8.1 の場合、「ハッシュがランダム化されていません!\n」と警告します
バージョン オブジェクトは文字列化をオーバーロードしますが、$^V を移植可能な形式に変換するために、
文字列表現の場合は、「sprintf()」の「%vd」変換を使用します。これは両方で機能します。
v-string またはバージョン オブジェクト:
printf "バージョンは v%vd\n", $^V; # Perlのバージョン
便利な方法については、「use VERSION」および「require VERSION」のドキュメントを参照してください。
実行中の Perl インタープリターが古すぎる場合は失敗します。
Perl バージョンの XNUMX 進数表現については、「$] も参照してください。
$] に対する $^V の主な利点は、Perl v5.10.0 以降ではオーバーロードされることです。
演算子を使用すると、他のバージョン表現と簡単に比較できます (例:
1.2.3 進数、リテラル v-string、「vXNUMX」、またはオブジェクト)。 欠点は、以前の
v5.10.0 までは、リテラルの v 文字列のみであったため、簡単に出力したり印刷したりすることはできません。
比較しました。
ニーモニック: バージョン オブジェクトには ^V を使用します。
${^WIN32_SLOPPY_STAT}
この変数が true 値に設定されている場合、Windows の "stat()" は、
ファイルを開きます。 これは、リンク数を決定できず、ファイルを作成できないことを意味します。
ファイルへの追加のハードリンクが存在する場合、属性は古くなっている可能性があります。 で
一方、特に上のファイルの場合、ファイルを開かない方がかなり高速です。
ネットワークドライブ。
この変数は、 サイトカスタマイズ.pl ローカルを構成するファイル
Perl のインストールでは、デフォルトで「ずさんな」「stat()」が使用されます。 のドキュメントを参照してください。
-f サイトのカスタマイズの詳細については、perlrun を参照してください。
この変数は Perl v5.10.0 で追加されました。
$EXECUTABLE_NAME
$^X Perl の現在のコピーを実行するために使用される名前 (C の "argv[0]" または (ここで
サポートされている) /proc/self/exe.
ホスト オペレーティング システムによっては、$^X の値は相対値または
Perl プログラム ファイルの絶対パス名、または呼び出しに使用される文字列の場合もあります
perl ですが、perl プログラム ファイルのパス名ではありません。 また、ほとんどのオペレーティング システムでは、
PATH 環境変数にないプログラムの呼び出しを許可するため、
$^X の値が PATH にあるという保証はありません。 VMS の場合、値は次のとおりです。
バージョン番号は含まれません。
通常、$^X の値を使用して、同じものの独立したコピーを再度呼び出すことができます。
現在実行中の Perl 、たとえば、
@first_run = `$^X -le "print int rand 100 for 1..100"`;
ただし、すべてのオペレーティング システムがフォークやキャプチャをサポートしているわけではないことを思い出してください。
コマンドの出力なので、この複雑なステートメントは移植できない可能性があります。
$^X の値をファイルのパス名として使用することは安全ではありません。
実行可能ファイルに必須のサフィックスを持つシステムでは、
コマンドを呼び出すときにサフィックスを付けます。 $^X の値をパス名に変換するには、次を使用します。
次のステートメント:
# ファイル名のセットを作成します (コマンド名ではありません)。
Configを使用します。
私の $this_perl = $^X;
if ($^O ne 'VMS') {
$this_perl .= $Config{_exe}
$this_perl =~ m/$Config{_exe}$/i を除く。
}
多くのオペレーティング システムでは、Perl プログラムへの読み取りアクセスが許可されているためです。
ファイルを使用してコピーを作成し、そのコピーにパッチを適用して、そのコピーを実行します。
セキュリティを意識した Perl プログラマーは、インストールされたコピーを呼び出すように注意する必要があります。
$^X によって参照されるコピーではなく、perl のコピーです。 次のステートメントはこれを実現します
目標を設定し、コマンドとして呼び出したり、
ファイルにソフトウェアを指定する必要があります。
Configを使用します。
私の $secure_perl_path = $Config{perlpath};
if ($^O ne 'VMS') {
$secure_perl_path .= $Config{_exe}
$secure_perl_path =~ m/$Config{_exe}$/i を除く。
}
Variables 関連する 〜へ レギュラー 表現
正規表現に関連する特殊変数のほとんどは副作用です。 Perl セット
これらの変数は一致が成功した場合に表示されるため、一致結果を確認する必要があります。
使用する前に。 例えば:
if( /P(A)TT(ER)N/ ) {
print "$1 と $2 を見つけました\n";
}
特に明記しない限り、これらの変数は読み取り専用であり、スコープが動的に設定されます。
正規表現変数の動的性質は、その値が制限されていることを意味します。
次のコードで示されているように、それらが含まれているブロックにコピーされます。
my $outer = 'ウォレスとグルミット';
my $inner = 'マットとジェフ';
私の $pattern = qr/(\S+) および (\S+)/;
sub show_n { print "\$1 は $1; \$2 は $2\n" }
{
アウター:
show_n() if $outer =~ m/$pattern/;
内側: {
show_n() if $inner =~ m/$pattern/;
}
show_n();
}
出力は、「OUTER」ブロック内で $1 と $2 の値が
$outer と一致します。 「INNER」ブロック内では、$1 と $2 の値は
$inner と照合しますが、ブロックの終わりまで (つまり、動的スコープ) に限ります。 後
「INNER」ブロックが完了すると、$1 と $2 の値が一致の値に戻ります。
別の一致を行っていない場合でも $outer に対して:
1ドルはウォレスです。 2ドルはグルミット
$1 はマットです。 2ドルはジェフです
1ドルはウォレスです。 2ドルはグルミット
性能 問題
Perl では伝統的に、XNUMX つの変数 "$`"、$&、または "$'" (またはその
「英語を使用する」に相当するもの)をコード内のどこにでも使用すると、後続のすべての成功パターンが発生します。
コードが後でアクセスする可能性がある場合に備えて、一致した文字列のコピーを作成します。
それらの変数の XNUMX つです。 これにより、全体にわたってかなりのパフォーマンス上のペナルティが課せられました。
したがって、一般にこれらの変数の使用は推奨されません。
Perl 5.6.0 では、インデックスを提供する「@-」および「@+」動的配列が導入されました。
成功した試合。 したがって、たとえば次のようにすることができます。
$str =~ /パターン/;
$`、$&、$' を出力します。 # bad: パフォーマンスヒット
印刷 # 良好: パフォーマンス ヒットなし
substr($str, 0, $-[0]),
substr($str, $-[0], $+[0]-$-[0]),
substr($str, $+[0]);
Perl 5.10.0 では、「/p」一致演算子フラグと、「${^PREMATCH}」、「${^MATCH}」、および
「${^POSTMATCH}」変数が導入され、ペナルティのみを受けることが可能になりました
「/p」でマークされたパターン。
Perl 5.18.0 以降では、perl は XNUMX つの変数のそれぞれの存在を認識し始めました。
個別に、文字列の必要な部分のみをコピーしました。 それで
$`; $&; "abcdefgh" =~ /d/
perl は文字列の「abcd」部分のみをコピーします。 それは大きな違いを生む可能性があります
何かのようなもの
$str = 'x' x 1_000_000;
$&; # おっと
$str =~ /x/g # XNUMX万文字ではなく、XNUMXつの文字がXNUMX万回コピーされる
Perl 5.20.0 では、新しいコピーオンライト システムがデフォルトで有効になり、最終的にすべてが修正されました。
これら XNUMX つの変数のパフォーマンスの問題を解決し、どこでも安全に使用できるようにします。
「Devel::NYTProf」および「Devel::FindAmpersand」モジュールは、これらの用途を見つけるのに役立ちます。
コード内に問題のある一致変数が含まれている可能性があります。
$<数字> ($1、$2、...)
対応するキャプチャ括弧のセットのサブパターンが含まれます。
最後に成功したパターン一致。ネストされたブロック内で一致したパターンはカウントされません。
すでに退出しているもの。
これらの変数は読み取り専用で、スコープが動的に設定されます。
ニーモニック: \digits など。
$ MATCH
$& 最後に成功したパターン一致と一致した文字列 (一致はカウントしません)
BLOCK 内に隠されているか、現在の BLOCK で囲まれた「eval()」)。
を使用した場合のパフォーマンスへの深刻な影響については、上記の「パフォーマンスの問題」を参照してください。
コード内でこの変数を (XNUMX 回でも) 使用します。
この変数は読み取り専用で、スコープが動的に設定されます。
ニーモニック: 一部のエディタの「&」のようなもの。
${^マッチ}
これは、パフォーマンスに影響を与えないことを除けば、$& ($MATCH) に似ています。
その変数に関連付けられたペナルティ。
上記の「パフォーマンスの問題」を参照してください。
Perl v5.18 以前では、次の場合にのみ定義された値を返すことが保証されています。
パターンは「/p」修飾子を使用してコンパイルまたは実行されました。 Perl v5.20 では、
"/p" 修飾子は何も行わないため、"${^MATCH}" は $MATCH と同じことを行います。
この変数は Perl v5.10.0 で追加されました。
この変数は読み取り専用で、スコープが動的に設定されます。
$プレマッチ
$` 最後に成功したパターン一致によって一致した文字列の前にある文字列、
BLOCK 内に隠された一致、または現在のブロックで囲まれた「eval」はカウントされません。
ブロック。
を使用した場合のパフォーマンスへの深刻な影響については、上記の「パフォーマンスの問題」を参照してください。
コード内でこの変数を (XNUMX 回でも) 使用します。
この変数は読み取り専用で、スコープが動的に設定されます。
ニーモニック: 「`」は引用符で囲まれた文字列の前に置かれることがよくあります。
${^プレマッチ}
これは、パフォーマンスを低下させないことを除けば、「$`」 ($PREMATCH) に似ています。
その変数に関連付けられたペナルティ。
上記の「パフォーマンスの問題」を参照してください。
Perl v5.18 以前では、次の場合にのみ定義された値を返すことが保証されています。
パターンは「/p」修飾子を使用してコンパイルまたは実行されました。 Perl v5.20 では、
"/p" 修飾子は何も行わないため、"${^PREMATCH}" は $PREMATCH と同じことを行います。
この変数は Perl v5.10.0 で追加されました。
この変数は読み取り専用で、スコープが動的に設定されます。
$POSTMATCH
$' 最後に成功したパターン一致によって一致したものに続く文字列
(BLOCK または「eval()」内に隠された一致はカウントしません。
現在のブロック)。 例:
ローカル $_ = 'abcdefghi';
/def/;
print "$`:$&:$'\n"; # abc:def:ghi を出力します
を使用した場合のパフォーマンスへの深刻な影響については、上記の「パフォーマンスの問題」を参照してください。
コード内でこの変数を (XNUMX 回でも) 使用します。
この変数は読み取り専用で、スコープが動的に設定されます。
ニーモニック: 多くの場合、引用符で囲まれた文字列の後に「'」が続きます。
${^ポストマッチ}
これは、パフォーマンスに影響を与えない点を除けば、「$'」 ($POSTMATCH) に似ています。
その変数に関連付けられたペナルティ。
上記の「パフォーマンスの問題」を参照してください。
Perl v5.18 以前では、次の場合にのみ定義された値を返すことが保証されています。
パターンは「/p」修飾子を使用してコンパイルまたは実行されました。 Perl v5.20 では、
"/p" 修飾子は何も行わないため、"${^POSTMATCH}" は $POSTMATCH と同じことを行います。
この変数は Perl v5.10.0 で追加されました。
この変数は読み取り専用で、スコープが動的に設定されます。
$LAST_PAREN_MATCH
$+ 最後に成功した検索パターンの最後の括弧と一致したテキスト。 これ
一連の代替パターンのどれが一致するかわからない場合に便利です。
例:
/バージョン: (.*)|リビジョン: (.*)/ && ($rev = $+);
この変数は読み取り専用で、スコープが動的に設定されます。
記憶術:前向きで前向きであること。
$LAST_SUBMATCH_RESULT
$^N 最近閉じられた使用済みグループ (つまり、
最後に成功した検索パターンの右端の閉じ括弧)。
これは主に、最近テキストを調べるために「(?{...})」ブロック内で使用されています。
一致しました。 たとえば、テキストを効果的に変数にキャプチャするには(加えて)、
$1、$2 など)、「(...)」を次のように置き換えます。
(?:(...)(?{ $var = $^N }))
このように $var を設定して使用すると、次のことを心配する必要がなくなります。
正確にどの番号の括弧のセットであるか。
この変数は Perl v5.8.0 で追加されました。
ニーモニック: 直前に閉じられた (おそらく) ネストされた括弧。
@LAST_MATCH_END
@+ この配列は、最後に成功したサブマッチの終端のオフセットを保持します。
現在アクティブなダイナミック スコープ。 $+[0] は、文字列の末尾のオフセットです。
試合全体。 これは、次の場合に "pos" 関数が返す値と同じ値です。
照合された変数に対して呼び出されます。 の nこの配列の 番目の要素
のオフセットを保持します n番目の部分一致なので、$+[1] は $1 が終了する位置を超えたオフセットです。
$+[2] $2 が終了する位置を超えたオフセット、など。 $#+ を使用して方法を決定できます
多くのサブグループが最後に成功した試合に参加していました。 の例を参照してください。
"@-" 変数。
この変数は Perl v5.6.0 で追加されました。
%LAST_PAREN_MATCH
%+ "@+" と同様に、"%+" ハッシュは名前付きキャプチャ バッファへのアクセスを許可します。
それらは、現在アクティブな動的スコープ内の最後に成功した一致に存在します。
たとえば、次の一致の後、$+{foo} は $1 と同等になります。
'foo' =~ /(? ふー)/;
「%+」ハッシュのキーには、キャプチャしたバッファの名前のみがリストされます(そして
したがって、定義された値に関連付けられます)。
「%+」の基本的な動作は、Tie::Hash::NamedCapture によって提供されます。
モジュールを開きます。
ご注意: 「%-」と「%+」は、ビューに関連付けられた共通の内部ハッシュに結合されたビューです。
最後に成功した正規表現。 したがって、それらへの反復アクセスを混合します。
「それぞれ」は予期しない結果をもたらす可能性があります。 同様に、最後に成功した一致があった場合、
変更すると、驚くような結果になる可能性があります。
この変数は Perl v5.10.0 で追加されました。
この変数は読み取り専用で、スコープが動的に設定されます。
@LAST_MATCH_START
@- "$-[0]" は、最後に成功した一致の開始位置のオフセットです。 「$-[」n"]" それは
一致する部分文字列の先頭のオフセット n-th サブパターン、または undef の場合
サブパターンが一致しませんでした。
したがって、$_ と一致した後、$& は "substr $_, $-[0], $+[0] - と一致します。
$-[0]"。同様に、$n 「$-[n]」の場合、「substr $_, $-[n], $+[n] - $-[n]」と一致します
が定義されており、$+ は「substr $_, $-[$#-], $+[$#-] - $-[$#-]」と一致します。 XNUMXつ
"$#-" を使用して、最後に成功した一致で最後に一致したサブグループを検索できます。
正規表現内のサブグループの数である $#+ と比較してください。 比較する
「@+」を付けてください。
この配列は、最後に成功したサブマッチの開始位置のオフセットを保持します。
現在アクティブな動的スコープ内。 「$-[0]」は、次の文字列へのオフセットです。
試合全体の始まり。 の nこの配列の 番目の要素はオフセットを保持します
n番目のサブマッチなので、「$-[1]」は $1 が始まるオフセット、「$-[2]」はオフセットです
$2 が始まる位置など。
変数 $var と一致した後:
「$`」は「substr($var, 0, $-[0])」と同じです。
$& は「substr($var, $-[0], $+[0] - $-[0])」と同じです。
「$'」は「substr($var, $+[0])」と同じです。
$1 は「substr($var, $-[1], $+[1] - $-[1])」と同じです。
$2 は「substr($var, $-[2], $+[2] - $-[2])」と同じです。
$3 は「substr($var, $-[3], $+[3] - $-[3])」と同じです。
この変数は Perl v5.6.0 で追加されました。
%LAST_MATCH_START
%- "%+" と同様に、この変数により、名前付きキャプチャ グループへのアクセスが許可されます。
現在アクティブな動的スコープ内で最後に成功した一致。 それぞれのキャプチャーへ
正規表現で見つかったグループ名は、配列への参照を関連付けます
その名前を持つすべてのバッファによってキャプチャされた値のリストが含まれています(
そのうちのいくつか)を、出現順に並べます。
次に例を示します。
if ('1234' =~ /(? 1)(? 2)(? 3)(? 4)/) {
foreach my $bufname (ソートキー %-) {
私の $ary = $-{$bufname};
foreach my $idx (0..$#$ary) {
print "\$-{$bufname}[$idx] : ",
(定義済み($ary->[$idx])
? 「'$ary->[$idx]'」
: "undef")、
"\n";
}
}
}
出力されます:
$-{A}[0] : '1'
$-{A}[1] : '3'
$-{B}[0] : '2'
$-{B}[1] : '4'
「%-」ハッシュのキーは、通常のファイルにあるすべてのバッファ名に対応します。
式です。
「%-」の動作は、Tie::Hash::NamedCapture モジュールを介して実装されます。
ご注意: 「%-」と「%+」は、ビューに関連付けられた共通の内部ハッシュに結合されたビューです。
最後に成功した正規表現。 したがって、それらへの反復アクセスを混合します。
「それぞれ」は予期しない結果をもたらす可能性があります。 同様に、最後に成功した一致があった場合、
変更すると、驚くような結果になる可能性があります。
この変数は Perl v5.10.0 で追加されました。
この変数は読み取り専用で、スコープが動的に設定されます。
$LAST_REGEXP_CODE_RESULT
$^R 最後に成功した正規表現「(?{ code })」の評価結果
アサーション (perlre を参照)。 に書き込まれる可能性があります。
この変数は Perl 5.005 で追加されました。
${^RE_DEBUG_FLAGS}
正規表現デバッグフラグの現在の値。 デバッグ出力を行わない場合は 0 に設定します。
「re 'debug'」モジュールがロードされるとき。 詳細については、「re」を参照してください。
この変数は Perl v5.10.0 で追加されました。
$ {^ RE_TRIE_MAXBUF}
特定の正規表現の最適化がどのように適用されるか、および適用されるメモリの量を制御します。
利用する。 デフォルトのこの値は 65536 で、512kB の一時ファイルに相当します。
キャッシュ。 大きな値を照合するときにメモリと速度を引き換えにするには、これをより高い値に設定します。
交代。 最適化を次のようにしたい場合は、より低い値に設定します。
可能な限りメモリを節約しても発生する場合は、負の値に設定します
最適化を防ぎ、メモリを最大限に節約します。 通常の状況下では
この変数には興味がありません。
この変数は Perl v5.10.0 で追加されました。
Variables 関連する 〜へ ファイルハンドル
現在選択されているファイルハンドルに依存する変数は、
「IO::Handle」オブジェクトの適切なオブジェクト メソッド。ただし、これは効率が劣ります。
通常の組み込み変数を使用します。 (これに関する以下の要約行には、次の単語が含まれています)
ハンドル。) まず最初に言わなければなりません
IO::ハンドルを使用します。
その後、どちらかを使用できます
メソッド ハンドル EXPR
あるいはもっと安全に、
ハンドル->メソッド(EXPR)
各メソッドは、「IO::Handle」属性の古い値を返します。 メソッドはそれぞれ
オプションの EXPR。指定されている場合、「IO::Handle」属性の新しい値を指定します。
問題中。 指定しない場合、ほとんどのメソッドは現在の値に対して何も行いません。ただし、次の場合を除きます。
「autoflush()」は 1 を想定しますが、違います。
「IO::Handle」クラスでのロードは負荷の高い操作であるため、その方法を学習する必要があります。
通常の組み込み変数を使用します。
これらの変数のいくつかは「読み取り専用」とみなされます。 つまり、割り当てようとすると、
この変数に、直接的または参照を通じて間接的にアクセスすると、run-
時間例外。
ほとんどの特殊変数のデフォルト値を変更するときは、十分に注意する必要があります。
この文書で説明されています。 ほとんどの場合、これらの変数をローカライズする前に、
変更しないと、変更が依存する他のモジュールに影響を与える可能性があるためです。
変更した特殊変数のデフォルト値。 これは正しいものの XNUMX つです
ファイル全体を一度に読み取る方法:
$fh、"<"、"foo" を開くか、死ぬか $!;
ローカル $/; # ローカライズされた丸呑みモードを有効にする
私の $content = <$fh>;
$fhを閉じます。
しかし、次のコードはかなり悪質です。
$fh、"<"、"foo" を開くか、死ぬか $!;
undef $/; # スラープモードを有効にする
私の $content = <$fh>;
$fhを閉じます。
他のモジュールはデフォルトの「ラインモード」でファイルからデータを読み込む可能性があるため、
したがって、今提示したコードが実行されると、$/ のグローバル値は次のようになります。
同じ Perl インタプリタ内で実行される他のコードについては変更されます。
通常、変数がローカライズされると、この変更が影響を与えるかどうかを確認する必要があります。
可能な限り最短の範囲。 したがって、すでに短い "{}" ブロック内に入っていない限り、
自分で作成する必要があります。 例えば:
私の $content = '';
$fh、"<"、"foo" を開くか、死ぬか $!;
{
ローカル $/;
$content = <$fh>;
}
$fhを閉じます。
以下は、独自のコードがどのように壊れるのかを示す例です。
for ( 1..3 ){
$\ = "\r\n";
厄介な_ブレイク();
"$_" を印刷します。
}
サブnasty_break {
$\ = "\f";
# $_ で何かをする
}
おそらく、このコードが以下と同等の内容を出力することを期待しているでしょう。
「1\r\n2\r\n3\r\n」
しかし、代わりに次の結果が得られます。
「1\f2\f3\f」
なぜ? 「nasty_break()」は「$\」を最初にローカライズせずに変更するためです。 設定した値
"nasty_break()" は、戻ったときにまだ存在します。 修正は「local()」を追加することです。
値は「nasty_break()」から漏れません。
ローカル $\ = "\f";
このような短い例では問題に気づきやすいですが、より複雑なコードでは、
特殊変数への変更をローカライズしないと問題が発生する可能性があります。
$ARGV 「<>」から読み取るときの現在のファイルの名前が含まれます。
@ARGV 配列 @ARGV には、スクリプト用のコマンドライン引数が含まれています。
$#ARGV は通常、引数の数から 0 を引いたものになります。これは、$ARGV[XNUMX] が
最初の引数、 プログラムのコマンド名そのもの。 コマンドについては「$0」を参照してください。
名前。
ARGV @ARGV でコマンド ライン ファイル名を反復処理する特別なファイルハンドル。
通常は、角度演算子 "<>" で null ファイルハンドルとして書き込まれます。 ご了承ください
現在、「ARGV」は「<>」演算子内でのみ魔法の効果を持っています。 他の場所で
これは、「<>」によって開かれた最後のファイルに対応する単純なファイルハンドルです。 で
特に、「\*ARGV」をパラメータとして、
ファイルハンドルを使用すると、関数がすべてのファイルの内容を自動的に読み取ることができない場合があります。
@ARGV 内のファイル。
ARGVOUT 実行時に現在開いている出力ファイルを指す特別なファイルハンドル。
インプレイス編集処理 -i。 大量の挿入を行う必要がある場合に便利です
$_ を変更し続ける必要はありません。 詳細については perlrun を参照してください。 -i スイッチ。
IO::Handle->output_field_separator( EXPR )
$OUTPUT_FIELD_SEPARATOR
$OFS
$、print オペレーターの出力フィールド区切り文字。 定義されている場合、この値は次のようになります。
print の各引数の間に print が表示されます。 デフォルトは「undef」です。
「output_field_separator()」は静的メソッドとしてのみハンドル上で呼び出すことができます。
「IO::ハンドル」を参照してください。
ニーモニック: print ステートメントに「,」がある場合に出力される内容。
HANDLE->input_line_number( EXPR )
$INPUT_LINE_NUMBER
$NR
$。 最後にアクセスされたファイルハンドルの現在の行番号。
Perl の各ファイルハンドルは、そこから読み取られた行数をカウントします。
($/ の値によっては、行を構成するものについての Perl の考え方が正しくない場合があります。
ファイルハンドルから行が読み取られるとき(「readline()」または「<>」経由)、
または、「tell()」または「seek()」が呼び出された場合、$. 行のエイリアスになります
そのファイルハンドルのカウンター。
$. に代入することでカウンタを調整できますが、実際にカウンタを動かすわけではありません。
シークポインタ。 ローカライズ $. 意志 ローカライズ ファイルハンドルの ライン カウント.
代わりに、どのファイルハンドルが $ であるかという Perl の概念をローカライズします。 現在
別名。
$。 ファイルハンドルを閉じるとリセットされますが、 開いているファイルハンドルが
「close()」を介さずに再度開きます。 詳細については、「I/O オペレータ」を参照してください。
パーロップで。 "<>" は明示的に閉じることがないため、行番号が増加します。
「ARGV」ファイル全体(ただし、perlfunc の「eof」の例を参照)。
「HANDLE->input_line_number(EXPR)」を使用して、行カウンターにアクセスすることもできます。
最後にどのハンドルにアクセスしたかを気にすることなく、指定されたファイルハンドルを取得できます。
ニーモニック: 多くのプログラムでは「.」が使用されます。 現在の行番号を意味します。
IO::Handle->input_record_separator( EXPR )
$INPUT_RECORD_SEPARATOR
$ RS
$/ 入力レコード区切り文字、デフォルトでは改行。 これは Perl の考えに影響を与えます。
「線」とは何か。 のような作品 awkの RS 変数 (空行を次のように扱うことを含む)
NULL 文字列に設定されている場合はターミネータ (空行にはスペースやスペースを含めることはできません)
タブ)。 複数の文字に一致させるために、複数の文字列に設定できます。
ターミネータ、またはファイルの最後まで読み取るには「undef」を指定します。 「\n\n」に設定します
ファイルに次のものが含まれている場合、「」に設定するのとは少し異なることを意味します。
連続した空行。 "" に設定すると、XNUMX つ以上の連続した空が扱われます。
行を単一の空行として表示します。 「\n\n」に設定すると、次の
入力された文字は、改行であっても次の段落に属します。
ローカル $/; # 「丸呑み」モードを有効にする
ローカル $_ = ; # ファイル全体がここにあります
s/\n[ \t]+/ /g;
覚えておいてください: $/ の値は文字列であり、正規表現ではありません。 awk より良いものでなければなりません
何か。 :-)
$/ を整数、整数を含むスカラー、またはスカラーへの参照に設定する
整数に変換可能な場合は、行の代わりにレコードを読み取ろうとします。
最大レコード サイズは、参照される整数の文字数になります。
したがって、この:
ローカル $/ = \32768; # または \"32768" または \$var_containing_32768
$fh、"<"、$myfile を開くか、$!;
ローカル $_ = <$fh>;
$fh から 32768 文字以下のレコードを読み取ります。 そうでない場合
レコード指向のファイルからの読み取り (または、OS にレコード指向がありません)
ファイル)の場合、読み取りのたびにデータの完全なチャンクが取得される可能性があります。 記録なら
設定したレコード サイズより大きい場合は、レコードがバラバラになって返されます。
レコード サイズをゼロ以下に設定しようとすることは非推奨であり、$/ が
値が「undef」であるため、(残りの) 全体が読み取られます。
ファイルにソフトウェアを指定する必要があります。
5.19.9 以降、$/ を他の形式の参照に設定すると、致命的な問題が発生します。
例外。 これは、将来 $/ を設定する新しい方法をサポートするための準備です。
VMS の場合のみ、レコードの読み取りは PerlIO レイヤーと関連するバッファリングをバイパスします。
同じファイルハンドル上でレコード読み取りと非レコード読み取りを混在させてはなりません。 録音モード
同じバッファリング層が両方のモードで使用されている場合にのみ、ライン モードと混合されます。
「input_record_separator()」は静的メソッドとしてのみハンドル上で呼び出すことができます。
「IO::ハンドル」を参照してください。
perlport の「改行」も参照してください。 「$」も参照してください。
ニーモニック: / は、詩を引用するときに行の境界を区切ります。
IO::Handle->output_record_separator( EXPR )
$OUTPUT_RECORD_SEPARATOR
$ORS
$\ 印刷オペレーターの出力レコード区切り記号。 定義されている場合、この値は次のようになります。
print の引数の最後の後に出力されます。 デフォルトは「undef」です。
「output_record_separator()」は静的メソッドとしてのみハンドル上で呼び出すことができます。
「IO::ハンドル」を参照してください。
ニーモニック: 出力の最後に「\n」を追加する代わりに「$\」を設定します。 また、それは
$/ と同じですが、これは Perl から「返される」ものです。
ハンドル->自動フラッシュ( EXPR )
$OUTPUT_AUTOFLUSH
$| ゼロ以外に設定すると、書き込みまたは印刷が行われるたびに、すぐにフラッシュが強制的に実行されます。
現在選択されている出力チャンネル。 デフォルトは 0 (
チャネルがシステムによって実際にバッファリングされているかどうか。 $| あなたがそうしたかどうかだけを教えてくれます
各書き込み後にフラッシュするように Perl に明示的に要求しました)。 STDOUT は通常、ラインになります
出力が端末に送信される場合はバッファリングされ、それ以外の場合はブロック バッファリングされます。 これを設定する
変数は、主にパイプやソケットに出力する場合に役立ちます。
Perl プログラムを実行しているとき rsh 出力をそのまま見たい
ハプニング。 これは入力バッファリングには影響しません。 perlfunc の「getc」を参照してください。
それ。 出力チャンネルの選択方法については、perlfunc の「select」を参照してください。 こちらも参照
IO::ハンドル。
覚え方: パイプを熱々にしたいとき。
${^LAST_FH}
この読み取り専用変数には、最後に読み取られたファイルハンドルへの参照が含まれています。 これは
によって設定されました " "、"readline"、"tell"、"eof"、および "seek"。これは同じハンドルです。
その$。 引数なしで「tell」と「eof」を使用します。 ハンドルにも使用されています
Perl が ", line 1" をエラーまたは警告メッセージに置き換えます。
この変数は Perl v5.18.0 で追加されました。
Variables 関連する 〜へ フォーマット
フォーマットの特殊変数は、ファイルハンドルの特殊変数のサブセットです。 perlform を参照してください。
Perl の形式に関する詳細情報。
$アキュムレーター
$^A 「format()」行の「write()」アキュムレータの現在値。 フォーマット
結果を $^A に入れる「formline()」呼び出しが含まれています。 電話した後、
形式では、「write()」は $^A の内容を出力し、空にします。 だからあなたは決して本当に
自分で「formline()」を呼び出して確認しない限り、$^A の内容は確認できません。
perlform および perlfunc の「formline PICTURE,LIST」を参照してください。
IO::ハンドル->format_formfeed(EXPR)
$FORMAT_FORMFEED
$^L フォーム フィードとして出力される形式。 デフォルトは「\f」です。
「format_formfeed()」はハンドル上で静的メソッドとしてのみ呼び出すことができます。 見る
IO::ハンドル。
HANDLE->format_page_number(EXPR)
$FORMAT_PAGE_NUMBER
$% 現在選択されている出力チャンネルの現在のページ番号。
ニーモニック: 「%」はページ番号です。 ンロフ.
HANDLE->format_lines_left(EXPR)
$FORMAT_LINES_LEFT
$- 現在選択されている出力チャンネルのページに残っている行数。
ニーモニック: 行ページ上の行 - 行印刷。
IO::ハンドル->format_line_break_characters EXPR
$FORMAT_LINE_BREAK_CHARACTERS
$: 現在の文字セット。その後、文字列が分割されて埋められる可能性があります。
形式の継続フィールド (「^」で始まる)。 デフォルトは「\n-」です。
スペース、改行、またはハイフンで区切ります。
ハンドルに対して "format_line_break_characters()" を呼び出すことはできません。静的関数としてのみ呼び出すことができます。
方法。 「IO::ハンドル」を参照してください。
記憶術: 詩における「コロン」は行の一部です。
HANDLE->ページごとのフォーマット行数(EXPR)
$FORMAT_LINES_PER_PAGE
$= 現在選択されている出力の現在のページ長 (印刷可能行数)
チャネル。 デフォルトは 60 です。
ニーモニック: = には水平線が入ります。
ハンドル->形式トップ名(EXPR)
$FORMAT_TOP_NAME
$^ 現在選択されている出力の現在のトップオブページ形式の名前
チャネル。 デフォルトは、ファイルハンドル名に「_TOP」が付加された名前です。 のために
たとえば、「STDOUT」ファイルハンドルのデフォルト形式のトップ名は「STDOUT_TOP」です。
ニーモニック: ページの先頭を指します。
HANDLE->フォーマット名(EXPR)
$FORMAT_NAME
$~ 現在選択されている出力チャネルの現在のレポート形式の名前。
デフォルトのフォーマット名はファイルハンドル名と同じです。 たとえば、
「STDOUT」ファイルハンドルのデフォルトのフォーマット名は「STDOUT」です。
記憶法: $^ の兄弟。
エラー Variables
変数 $@、$!、$^E、$? さまざまなタイプのエラーに関する情報が含まれています
Perl プログラムの実行中に発生する可能性のある条件。 変数が表示されます
エラーを報告したサブシステムと Perl の間の「距離」順に並べられます。
プロセス。 これらは、Perl インタプリタ、C ライブラリ、オペレーティング システムによって検出されるエラーに対応します。
それぞれシステム、または外部プログラムです。
これらの変数の違いを説明するには、次の Perl を考慮してください。
一重引用符で囲まれた文字列を使用する式。 このステートメントの実行後、perl
次の XNUMX つの特殊なエラー変数がすべて設定されている可能性があります。
評価q{
$pipe「/cdrom/install |」を開きます。 さもなければ$!;
私の @res = <$pipe>;
$pipe を閉じるか、死ぬか "悪いパイプ: $?, $!";
};
Perl が「eval()」式を実行すると、「open()」、「 "、 そして
「close」は C ランタイム ライブラリを呼び出し、そこからオペレーティング システム カーネルを呼び出します。 パール
$を設定します! これらの呼び出しのいずれかが失敗した場合は、C ライブラリの「errno」に通知されます。
$@ は、「eval」される文字列がコンパイルされなかった場合に設定されます (これは、「open」または「open」の場合に発生する可能性があります)
「close」は不正なプロトタイプとともにインポートされた場合)、または評価中に Perl コードが実行された場合
"死亡しました。 このような場合、$@ の値はコンパイル エラー、または "die" への引数です。
(これにより $! と $? が補間されます)。 (ただし、「致命的」も参照してください。)
いくつかのオペレーティング システムでは、$^E に次のようなより詳細なエラー インジケーターが含まれる場合があります。
この場合、「CDROM トレイが閉まっていません。」 拡張エラーメッセージをサポートしていないシステム
$^E は $! と同じままにしておきます。
最後に、$? 外部プログラムの場合、0 以外の値に設定される可能性があります。 /cdrom/インストール 失敗します。 の
上位 XNUMX ビットは、プログラムが遭遇した特定のエラー条件を反映します (
プログラムの「exit()」値)。 下位 XNUMX ビットは、信号などの障害モードを反映します。
死亡とコアダンプの情報。 見る wait 詳しくは(2)をご覧ください。 $とは対照的に! そして$^E、
エラー状態が検出された場合にのみ設定される変数 $? 「待機」ごとに設定されます
またはパイプを「close」して、古い値を上書きします。 これは $@ に似ており、「eval()」ごとに行われます。
失敗すると常に設定され、成功するとクリアされます。
詳細については、$@、$!、$^E、$? の個別の説明を参照してください。
${^CHILD_ERROR_NATIVE}
最後のパイプクローズ、バッククォート ("``") コマンドによって返されたネイティブステータス。
「wait()」または「waitpid()」への呼び出し、または「system()」オペレーターからの呼び出しが成功しました。 の上
POSIX のようなシステムでは、この値は WIFEXITED、WEXITSTATUS、
によって提供される WIFSIGNALED、WTERMSIG、WIFSTOPPED、WSTOPSIG、および WIFCONTINUED 関数
POSIXモジュール。
VMS では、これは実際の VMS 終了ステータスを反映します。 つまり$と同じですか? いつ
プラグマ「use vmsish 'status'」が有効になっています。
この変数は Perl v5.10.0 で追加されました。
$EXTENDED_OS_ERROR
$^E 現在のオペレーティング システムに固有のエラー情報。 現時点では、これ
$とは異なります! VMS、OS/2、Win32 (および MacPerl) のみで動作します。 その他すべてについて
プラットフォームでは、$^E は常に $! と同じです。
VMS では、$^E は最後のシステム エラーからの VMS ステータス値を提供します。 これは
$! によって提供される情報よりも、最後のシステム エラーに関するより具体的な情報。
これは、$! の場合に特に重要です。 に設定されています EVMSERR.
OS/2 では、$^E は、次のいずれかの方法で OS/2 API への最後の呼び出しのエラー コードに設定されます。
CRT、または Perl から直接。
Win32 では、$^E は常に Win32 によって報告された最後のエラー情報を返します。
Win32 API 内から最後のエラーを記述する「GetLastError()」を呼び出します。
ほとんどの Win32 固有のコードは $^E 経由でエラーを報告します。 ANSI C および Unix のような呼び出し
「errno」を設定すると、ほとんどの移植可能な Perl コードが $! 経由でエラーを報告します。
$!の説明に記載されている注意事項通常は $^E にも適用されます。
この変数は Perl 5.003 で追加されました。
ニーモニック: 追加のエラーの説明。
$EXCEPTIONS_BEING_CAUGHT
$^S インタプリタの現在の状態。
$^S 状態
---------- -----------------------------------
undef 解析モジュール、eval、またはメインプログラム
true (1) evalを実行する
false (0) それ以外の場合
最初の状態は、$SIG{__DIE__} ハンドラーと $SIG{__WARN__} ハンドラーで発生する可能性があります。
英語名 $EXCEPTIONS_BEING_CAUGHT は若干誤解を招きます。
「undef」値は、例外がキャッチされているかどうかを示しません。
メインプログラムのコンパイルでは例外がキャッチされません。
この変数は Perl 5.004 で追加されました。
$警告
$^W 警告スイッチの現在の値。次の場合に最初は true。 -w 使用されました、偽
それ以外の場合は、直接変更可能です。
警告も参照してください。
ニーモニック: -w スイッチ。
${^警告_BITS}
「use warnings」プラグマによって有効になっている現在の警告チェックのセット。 それは持っています
$^H および "%^H" 変数と同じスコープです。 正確な値が考慮されます
これは警告プラグマの内部にあり、Perl のバージョン間で変更される可能性があります。
この変数は Perl v5.6.0 で追加されました。
$OS_ERROR
$ERRNO
$! 参照される場合は、$! C の「errno」整数変数の現在値を取得します。
だったら$! に数値が割り当てられ、その値が「errno」に格納されます。 いつ
文字列 $! として参照されます。 に対応するシステム エラー文字列が生成されます。
「えーっ」。
多くのシステム呼び出しまたはライブラリ呼び出しは、失敗した場合に原因を示すために「errno」を設定します。
失敗。 彼らは通常そうします 成功した場合は、「errno」をゼロに設定します。 これはつまり
「errno」、つまり $! のみが意味を持ちます。 直ちに 後 失敗:
if ($fh、"<"、$filename を開きます) {
#ここで$! 意味がありません。
...
}
他{
# ここだけが $ です! 意味のある。
...
# すでにここにいます $! 無意味かもしれない。
}
# ここでは成功か失敗かのどちらかになる可能性があるので、
# $! 意味がありません。
ここでは、 無意味な $! という意味です。 「open()」の結果とは無関係かもしれません
オペレーター。 $への代入! も同様に一時的です。 すぐに使用できます
「die()」演算子を呼び出す前に、終了値を設定するか、
エラーに対応するシステムエラー文字列 n、または $! を復元します。 意味のあるものに
でのみ停止させることができます。
ニーモニック: いったい何が起こったのでしょうか?
%OS_エラー
%ERRNO
%! 「%!」の各要素$! の場合にのみ true 値を持ちます。 その値に設定されます。 のために
たとえば、$!{ENOENT} は、$! の現在の値がその場合にのみ true になります。 は「エノエント」です。
つまり、最新のエラーが「そのようなファイルまたはディレクトリはありません」(またはその道徳的エラー)だった場合です。
同等: すべてのオペレーティング システムでその正確なエラーが発生するわけではありませんし、すべてのオペレーティング システムで同じエラーが発生するわけではありません。
言語)。 具体的な真の値は保証されていませんが、過去には
通常は $! の数値です。 特定のキーが有効かどうかを確認するには
システム上で意味がある場合は、「exists $!{the_key}」を使用してください。 有効なキーのリストについては、次を使用します。
「キー %!」。 詳細については、「Errno」を参照してください。また、「$!」も参照してください。
この変数は Perl 5.005 で追加されました。
$CHILD_ERROR
$? 最後のパイプクローズ、バッククォート ("``") コマンドによって返されたステータス、成功
「wait()」または「waitpid()」を呼び出すか、「system()」オペレーターから呼び出します。 これだけ
従来の Unix の「wait()」システム コールによって返される 16 ビットのステータス ワード (または
それ以外はそれのように見えるように作られています)。 したがって、サブプロセスの終了値は次のようになります。
本当に ("$? >> 8")、および "$? & 127" は、プロセスが終了したシグナル (存在する場合) を示します。
from、「$? & 128」はコア ダンプがあったかどうかを報告します。
さらに、「h_errno」変数が C でサポートされている場合は、その値が返されます。
$経由? 「gethost*()」関数が失敗した場合。
「SIGCHLD」のシグナル ハンドラーをインストールしている場合、$? の値は通常は
そのハンドラーの外では間違っています。
「END」サブルーチン内 $? に与えられる値が含まれています
"出口()"。 $を変更できますか? 「END」サブルーチン内で終了ステータスを変更します。
あなたのプログラム。 例えば:
終わり {
$? = 1 の場合 $? == 255; # 死ねば255になる
}
VMS では、プラグマ「use vmsish 'status'」により $? が生成されます。 実際の VMS 終了を反映する
POSIX ステータスのデフォルトのエミュレーションの代わりにステータス。 「$?」を参照してください。 perlvms で
詳細。
ニーモニック: に似ています sh と kshの.
$EVAL_ERROR
$@ 最後の「eval()」演算子からの Perl 構文エラー メッセージ。 $@ が null の場合
文字列、最後の「eval()」は正しく解析され、実行されました(ただし、操作は
呼び出した関数は通常の方法で失敗した可能性があります)。
警告メッセージはこの変数には収集されません。 ただし、
「%SIG」で説明されているように $SIG{__WARN__} を設定することで警告を処理するルーチン。
ニーモニック: 構文エラー「at」はどこにありましたか?
Variables 関連する 〜へ 通訳 状態
これらの変数は、現在のインタープリターの状態に関する情報を提供します。
$コンパイル
$^C に関連付けられたフラグの現在の値。 -c スイッチ。 主に使用されるのは、
-MO=... コンパイル時にコードの動作を変更できるようにするため。
たとえば、通常の遅延ロードではなく、コンパイル時に「AUTOLOAD」します。
「$^C = 1」を設定することは、「B::minus_c」を呼び出すことと似ています。
この変数は Perl v5.6.0 で追加されました。
$デバッグ
$^D デバッグ フラグの現在の値。 読み取りまたは設定が可能です。 その命令のように-
行と同等の場合は、「$^D = 10」または「$^D =」などの数値または記号値を使用できます。
「st」」。
ニーモニック: の値 -D スイッチ。
${^エンコーディング}
廃止されました!!!
この オブジェクト 参照 ソースを変換するために使用される「Encode」オブジェクトに
コードを Unicode に変換します。 この変数のおかげで、Perl スクリプトを次のようにする必要はありません。
UTF-8で書かれています。 デフォルトは「undef」です。
この変数を「undef」以外の値に設定することは非推奨です。
設計と実装における根本的な欠陥。 撤去する予定です
将来の Perl バージョンから。 その目的は、非 ASCII Perl スクリプトを許可することでした。
UTF-8 で記述する必要はありません。 これは、エディターが機能する前に便利でした。
UTF-8 でエンコードされたテキストは一般的でしたが、それはずっと前のことです。 などの問題を引き起こします
予期しない他のモジュールの動作に影響を与えるため、
一般的な騒乱。 これを使用すると、セグメンテーション違反が発生する可能性があります。
このような機能が必要な場合は、encoding プラグマを使用する必要があります。
これも非推奨ですが、厄介な副作用は少なくなります。
あなたのコードが悪影響を受けているためにここに来ているのであれば、
誰かがこの変数を使用した場合、通常は次のようにすることで回避できます。
ローカル ${^ENCODING};
壊れつつある関数の先頭付近。 これにより、
インクルード関数の実行スコープ中の変数。
この変数は Perl 5.8.2 で追加されました。
${^GLOBAL_PHASE}
Perl インタープリタの現在のフェーズ。
可能な値は次のとおりです。
構築
「PerlInterpreter*」は「perl_construct」によって構築されています。 これ
value は主に完全性を保つためと、基礎となる C 経由で使用するために存在します。
変数「PL_phase」。 Perlコードでは実際には不可能です
インタプリタの構築が完了しない限り実行されます。
START これはグローバルなコンパイル時間です。 これには、基本的にすべての「BEGIN」が含まれます。
コンパイル時に直接または間接的に実行されるブロック
トップレベルのプログラム。
「BEGIN」ブロックとの混同を避けるため、このフェーズは「BEGIN」とは呼ばれません。
これらは、コンパイル単位のコンパイル時に実行されるためではなく、
まさにトップレベルのプログラムです。 実行時に入力される新しいローカライズされたコンパイル時間
たとえば「eval "use SomeModule"」のような構成による時間はグローバルではありません
インタプリタのフェーズであるため、「${^GLOBAL_PHASE}」には反映されません。
CHECK 任意の「CHECK」ブロックを実行します。
INIT 「CHECK」に似ていますが、「CHECK」ブロックではなく「INIT」ブロックを対象とします。
RUN メインのランタイム、つまり「PL_main_root」の実行。
END 任意の「END」ブロックの実行。
破壊する
地球規模の破壊。
UNITCHECK ブロックには値がないことにも注意してください。 それは、それらが
各コンパイル単位に対して個別に実行されるため、グローバルではありません
通訳フェーズ。
すべてのプログラムが考えられる各フェーズを通過する必要はありませんが、移行は
あるフェーズから別のフェーズへの移行は、上記で説明した順序でのみ発生する可能性があります
リスト。
Perl コードで確認できるすべてのフェーズの例:
BEGIN { print "コンパイル時: ${^GLOBAL_PHASE}\n" }
INIT { print "init-time: ${^GLOBAL_PHASE}\n" }
CHECK { print "check-time: ${^GLOBAL_PHASE}\n" }
{
パッケージ Print::Phase;
サブニュー{
私の ($class, $time) = @_;
祝福を返します\$time、$class;
}
サブ破壊{
私の$ self =シフト;
print "$$self: ${^GLOBAL_PHASE}\n";
}
}
print "実行時: ${^GLOBAL_PHASE}\n";
私の $runtime = Print::Phase->new(
「字句変数は END の前にガベージ コレクションされます」
);
END { print "終了時間: ${^GLOBAL_PHASE}\n" }
私たちの $destruct = Print::Phase->new(
「パッケージ変数は END の後にガベージ コレクションされます」
);
これは印刷されます
コンパイル時: START
チェック時間: CHECK
初期化時間: INIT
ランタイム: RUN
レキシカル変数は、END: RUN の前にガベージ コレクションされます。
終了時間: END
パッケージ変数は、END: DESTRUCT の後にガベージ コレクションされます。
この変数は Perl 5.14.0 で追加されました。
$^H 警告: この変数は厳密に内部使用専用です。 その可用性、
動作、内容は予告なく変更する場合があります。
この変数には、Perl インタープリターのコンパイル時のヒントが含まれています。 の終わりに
BLOCK のコンパイル時に、この変数の値が値に復元されます。
インタープリターはブロックのコンパイルを開始しました。
perl がレキシカル スコープを提供するブロック構造の解析を開始するとき (たとえば、
eval 本体、必要なファイル、サブルーチン本体、ループ本体、または条件付きブロック)、
$^H の既存の値は保存されますが、その値は変更されません。 とき
ブロックのコンパイルが完了すると、保存された値が回復します。 間に
その値が保存および復元されるポイント、BEGIN 内で実行されるコード
ブロックは $^H の値を自由に変更できます。
この動作は字句スコープのセマンティックを提供し、で使用されます。
たとえば、「use strict」プラグマ。
内容は整数でなければなりません。 それのさまざまなビットがさまざまな目的で使用されます
実用的なフラグ。 次に例を示します。
サブ add_100 { $^H |= 0x100 }
サブ foo {
BEGIN { add_100() }
bar->baz($boon);
}
BEGIN ブロックの実行中に何が起こるかを考えてみましょう。 この時点で、
BEGIN ブロックは既にコンパイルされていますが、「foo()」の本体はまだ実行中です。
編集済み。 したがって、$^H の新しい値は、
「foo()」はコンパイル中です。
「BEGIN { add_100() }」ブロックを次のものに置き換えます。
BEGIN {厳密が必要です。 strict->import('vars') }
「use strict 'vars'」がどのように実装されているかを示します。 条件付きバージョンはこちら
同じ字句プラグマの:
ベギン {
厳密に要求します。 strict->import('vars') if $condition
}
この変数は Perl 5.003 で追加されました。
%^H "%^H" ハッシュは、$^H と同じスコープ セマンティックを提供します。 これは便利です
レキシカルスコープのプラグマの実装用。 perlプラグマを参照してください。 すべてのエントリ
実行時にアクセスされると文字列化されるため、単純な値のみを使用できます
収容。 これは、たとえば、オブジェクトへのポインターがないことを意味します。
「%^H」にアイテムを入れる際、他のユーザーとの競合を避けるため
ハッシュには、使用するキーに関する規則があります。 モジュールは使用する必要があります
モジュールの名前 (メイン パッケージの名前) で始まるキーと、
"/" キャラクター。 たとえば、モジュール「Foo::Bar」は次のようなキーを使用する必要があります
"Foo::Bar/baz".
この変数は Perl v5.6.0 で追加されました。
${^OPEN}
PerlIO が使用する内部変数。 「\0」で区切られた XNUMX つの部分からなる文字列
最初の部分は入力レイヤーを記述し、XNUMX 番目の部分は入力レイヤーを記述します。
出力層。
この変数は Perl v5.8.0 で追加されました。
$PERLDB
$^P デバッグをサポートするための内部変数。 さまざまなビットの意味は次のとおりです。
変更される可能性がありますが、現在は以下を示しています。
0x01 デバッグ サブルーチンの開始/終了。
0x02 行ごとのデバッグ。 それぞれに対して「DB::DB()」サブルーチンが呼び出されるようにします。
ステートメントが実行されました。 また、ソース コード行を保存します (0x400 など)。
0x04 最適化をオフにします。
0x08 将来のインタラクティブな検査のために、より多くのデータを保存します。
0x10 サブルーチンが定義されているソース行に関する情報を保持します。
0x20 シングルステップオンで開始します。
0x40 レポート時に名前の代わりにサブルーチン アドレスを使用します。
0x80 「goto &subroutine」も報告する。
0x100 評価があった場所に基づいて、評価に有益な「ファイル」名を提供します
コンパイル。
0x200 場所に基づいて匿名サブルーチンに有益な名前を提供します
コンパイルされました。
0x400 ソース コード行を "@{"_<$filename"}" に保存します。
0x800 ソースを保存するとき、サブルーチンを生成しない eval を含めます。
0x1000
ソースを保存するときは、コンパイルされていないソースを含めます。
一部のビットはコンパイル時にのみ関連し、一部は実行時にのみ関連する場合があります。 これは
新機構のため、細部が変更になる場合があります。 perldebguts も参照してください。
${^汚染}
汚染モードがオンかオフかを反映します。 on の場合は 1 (プログラムは -T)、0
オフの場合は-1、汚染警告のみが有効な場合 (つまり、 -t or -TU).
この変数は読み取り専用です。
この変数は Perl v5.8.0 で追加されました。
${^ユニコード}
Perl の特定の Unicode 設定を反映します。 「-C」については、perlrun のドキュメントを参照してください。
可能な値の詳細については、切り替えてください。
この変数は Perl の起動時に設定され、その後は読み取り専用になります。
この変数は Perl v5.8.2 で追加されました。
${^UTF8CACHE}
この変数は、内部 UTF-8 オフセット キャッシュ コードの状態を制御します。 1 のための
on (デフォルト)、オフの場合は 0、キャッシュ コードをすべてチェックしてデバッグする場合は -1
線形スキャンに対して結果が表示され、不一致があるとパニックになります。
この変数は Perl v5.8.9 で追加されました。 変更または削除される場合があります
予告なしに、しかし現在、境界の再計算を避けるために使用されています
マルチバイト UTF-8 エンコード文字。
${^UTF8LOCALE}
この変数は、perl の起動時に UTF-8 ロケールが検出されたかどうかを示します。
この情報は、perl がadjust-utf8ness-to-locale モードのときに使用されます (
「-CL」コマンドライン スイッチを指定して実行した場合); これについての詳細は perlrun を参照してください。
この変数は Perl v5.8.8 で追加されました。
非推奨の と 削除 variables
変数を非推奨にすることは、perl メンテナーが最終的に削除する意図を発表します
言語からの変数。 ステータスに関係なく、まだ利用できる場合があります。 を使って
非推奨の変数は警告をトリガーします。
変数が削除されると、その変数を使用すると、変数が削除されたことを示すエラーがトリガーされます。
サポートされていません。
エラー メッセージの詳細については、perldiag を参照してください。
$# $# は、印刷された数値をフォーマットするために使用できる変数でした。 後
非推奨サイクル、その魔法は Perl v5.10.0 で削除され、それを使用するとトリガーされるようになりました
警告: 「$# はサポートされなくなりました」。
これは、最後のインデックスを取得するために配列名の前で使用するシジルではありません。
$#配列のように。 これは、Perl で配列の最後のインデックスを取得する方法です。 の
XNUMXつは互いに何の関係もありません。
Perl 5 で非推奨。
Perl v5.10.0 で削除されました。
$* $* は、複数行の一致を有効にするために使用できる変数でした。 後
非推奨サイクルで、その魔法は Perl v5.10.0 で削除されました。 今それを使用すると、
警告: 「$* はサポートされなくなりました」。 「/s」および「/m」正規表現を使用する必要があります
代わりに修飾子。
Perl 5 で非推奨。
Perl v5.10.0 で削除されました。
$[ この変数は、配列の最初の要素のインデックスと、最初の要素のインデックスを格納します。
部分文字列の文字。 デフォルトは 0 ですが、理論的には XNUMX に設定できます。
1 は、Perl の動作をより似たものにします awk (または Fortran) 添え字を付けるときと
を評価する index() と substr() 機能します。
Perl のリリース 5 以降、$[ への代入はコンパイラ ディレクティブとして扱われ、
他のファイルの動作に影響を与えることはできません。 (そのため、割り当てることができるのは
コンパイル時の定数をそれに追加します。) その使用は強くお勧めしません。
Perl v5.10.0 より前では、 $[ への割り当ては、外部のレキシカル スコープから見ることができました。
他のコンパイル時ディレクティブ (strict など) とは異なり、同じファイルです。 使用する
ローカル() その値を字句ブロックに厳密にバインドします。 今はいつも
レキシカルスコープ。
Perl v5.16.0 では、arybase モジュールによって実装されています。 詳細については、arybase を参照してください
その挙動の詳細。
「use v5.16」または「no feature "array_base"」の下では、 $[ はもはや効果がなく、
常に 0 を含みます。0 を割り当てることは許可されていますが、それ以外の値は割り当てられません。
エラーを生成します。
記憶法: [ 添え字を開始します。
Perl v5.12.0 で非推奨になりました。
onworks.net サービスを使用してオンラインで perlvar を使用する