Perl-特別な変数

Perlで事前定義された特別な意味を持ついくつかの変数があります。これらは、$ _(以下で説明)などの通常の変数インジケーター($、@、または%)の後に句読文字を使用する変数です。

ほとんどの特殊変数には、長い名前のような英語があります。たとえば、オペレーティングシステムエラー変数$!$ OS_ERRORと書くことができます。しかし、名前のように英語を使用する場合は、1行入力する必要がありますuse English;プログラムファイルの先頭にあります。これにより、インタプリタは変数の正確な意味を取得できます。

最も一般的に使用される特殊変数は$ _で、これにはデフォルトの入力とパターン検索文字列が含まれています。たとえば、次の行で-

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print $_;
   print "\n";
}

実行すると、次の結果が生成されます-

hickory
dickory
doc

繰り返しますが、$ _変数を明示的に使用せずに同じ例を確認しましょう-

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print;
   print "\n";
}

実行すると、次の結果も生成されます-

hickory
dickory
doc

初めてループを実行すると、「ヒッコリー」が出力されます。2回目は「dickory」、3回目は「doc」が印刷されます。これは、ループの各反復で、現在の文字列が$ _に配置され、デフォルトでprintで使用されるためです。これは、指定しなくてもPerlが$ _を想定する場所です-

  • ordやintなどの関数、およびデフォルトでSTDINに設定されている-tを除くすべてのファイルテスト(-f、-d)を含む、さまざまな単項関数。

  • 印刷やリンク解除などのさまざまなリスト機能。

  • =〜演算子なしで使用した場合の、パターンマッチング操作m //、s ///、およびtr ///。

  • 他の変数が指定されていない場合のforeachループのデフォルトのイテレーター変数。

  • grepおよびmap関数の暗黙のイテレータ変数。

  • 行入力操作の結果がwhileテストの唯一の基準としてそれ自体でテストされるときに入力レコードを配置するデフォルトの場所(つまり、)。しばらくの間のテスト以外では、これは起こらないことに注意してください。

特殊変数タイプ

特殊変数の使用法と性質に基づいて、次のカテゴリに分類できます-

  • グローバルスカラー特殊変数。
  • グローバル配列特殊変数。
  • グローバルハッシュ特殊変数。
  • グローバルスペシャルファイルハンドル。
  • グローバル特殊定数。
  • 正規表現の特殊変数。
  • Filehandle特殊変数。

グローバルスカラー特殊変数

これがすべてのスカラー特殊変数のリストです。対応する英語のような名前を記号名とともにリストしました。

$ _ デフォルトの入力およびパターン検索スペース。
$ ARG
$。 最後に読み取られたファイルハンドルの現在の入力行番号。ファイルハンドルを明示的に閉じると、行番号がリセットされます。
$ NR
$ / 入力レコード区切り文字。デフォルトでは改行。null文字列に設定すると、空白行が区切り文字として扱われます。
$ RS
$、 印刷演算子の出力フィールド区切り文字。
$ OFS
$ \ 印刷演算子の出力レコード区切り文字。
$ ORS
$ " 「$」と同様ですが、二重引用符で囲まれた文字列(または同様の解釈された文字列)に補間されたリスト値に適用される点が異なります。デフォルトはスペースです。
$ LIST_SEPARATOR
$; 多次元配列エミュレーション用の添え字区切り文字。デフォルトは「\ 034」です。
$ SUBSCRIPT_SEPARATOR
$ ^ L フォームフィードを実行するためにフォーマットが出力するもの。デフォルトは「\ f」です。
$ FORMAT_FORMFEED
$: 現在の文字セット。その後、文字列を分割して、フォーマットの継続フィールド(^で始まる)を埋めることができます。デフォルトは「\ n」です。
$ FORMAT_LINE_BREAK_CHARACTERS
$ ^ A フォーマット行の書き込みアキュムレータの現在の値。
$ ACCUMULATOR
$# 印刷された数値の出力形式が含まれます(非推奨)。
$ OFMT
$? 最後のパイプクローズ、バッククォート( ``)コマンド、またはシステムオペレーターによって返されるステータス。
$ CHILD_ERROR
$! 数値コンテキストで使用される場合、errno変数の現在の値を生成し、最後のシステムコールエラーを識別します。文字列コンテキストで使用すると、対応するシステムエラー文字列が生成されます。
$ OS_ERRORまたは$ ERRNO
$ @ 最後のevalコマンドからのPerl構文エラーメッセージ。
$ EVAL_ERROR
$$ このスクリプトを実行しているPerlプロセスのpid。
$ PROCESS_IDまたは$ PID
$ < このプロセスの実際のユーザーID(uid)。
$ REAL_USER_IDまたは$ UID
$> このプロセスの実効ユーザーID。
$ EFFECTIVE_USER_IDまたは$ EUID
$( このプロセスの実際のグループID(gid)。
$ REAL_GROUP_IDまたは$ GID
$) このプロセスの効果的なガイド。
$ EFFECTIVE_GROUP_IDまたは$ EGID
$ 0 実行中のPerlスクリプトを含むファイルの名前が含まれます。
$ PROGRAM_NAME
$ [ 配列の最初の要素と部分文字列の最初の文字のインデックス。デフォルトは0です。
$] バージョンとパッチレベルを1000で割った値を返します。
$ PERL_VERSION
$ ^ D デバッグフラグの現在の値。
$ DEBUGGING
$ ^ E 一部のプラットフォームでの拡張エラーメッセージ。
$ EXTENDED_OS_ERROR
$ ^ F 最大システムファイル記述子、通常は2。
$ SYSTEM_FD_MAX
$ ^ H 特定の実用的なモジュールによって有効化される内部コンパイラヒントが含まれています。
$ ^ I インプレース編集拡張機能の現在の値。undefを使用して、インプレース編集を無効にします。
$ INPLACE_EDIT
$ ^ M $ Mの内容は、Perlがメモリ不足エラーで停止した場合の緊急メモリプールとして使用できます。$ Mを使用するには、Perlの特別なコンパイルが必要です。詳細については、INSTALLドキュメントを参照してください。
$ ^ O 現在のPerlバイナリがコンパイルされたオペレーティングシステムの名前が含まれています。
$ OSNAME
$ ^ P デバッガーがそれ自体をデバッグしないようにクリアする内部フラグ。
$ PERLDB
$ ^ T スクリプトの実行が開始された時刻(エポックからの秒数)。
$ BASETIME
$ ^ W 警告スイッチの現在の値(trueまたはfalse)。
$警告
$ ^ X Perlバイナリ自体が実行された名前。
$ EXECUTABLE_NAME
$ ARGV <ARGV>から読み取るときの現在のファイルの名前が含まれます。

グローバル配列特殊変数

@ARGV スクリプト用のコマンドライン引数を含む配列。
@INC do、require、またはuse構造によって評価されるPerlスクリプトを検索する場所のリストを含む配列。
@F -aコマンドラインスイッチが指定されたときに入力行が分割される配列。

グローバルハッシュ特殊変数

%INC doまたはrequireを介してインクルードされた各ファイルのファイル名のエントリを含むハッシュ。
%ENV 現在の環境を含むハッシュ。
%SIG さまざまなシグナルのシグナルハンドラーを設定するために使用されるハッシュ。

グローバルスペシャルファイルハンドル

ARGV @ARGVのコマンドラインファイル名を反復処理する特別なファイルハンドル。通常、<>ではnullファイルハンドルとして記述されます。
STDERR 任意のパッケージの標準エラー用の特別なファイルハンドル。
STDIN 任意のパッケージの標準入力用の特別なファイルハンドル。
STDOUT 任意のパッケージの標準出力用の特別なファイルハンドル。
データ スクリプトを含むファイル内の__END__トークンに続くものを参照する特別なファイルハンドル。または、__ DATA__がで見つかったのと同じパッケージ内のデータを読み取っている限り、必要なファイルの__DATA__トークンに続くものの特別なファイルハンドル。
_(アンダースコア) 最後のstat、lstat、またはファイルテストオペレーターからの情報をキャッシュするために使用される特別なファイルハンドル。

グローバル特殊定数

__終わり__ プログラムの論理的な終わりを示します。以下のテキストは無視されますが、DATAファイルハンドルを介して読み取ることができます。
__ファイル__ プログラム内で使用されているポイントのファイル名を表します。文字列に補間されません。
__ライン__ 現在の行番号を表します。文字列に補間されません。
__パッケージ__ コンパイル時の現在のパッケージ名を表します。現在のパッケージがない場合は未定義です。文字列に補間されません。

正規表現の特殊変数

$ digit 最後に一致したパターンの対応する括弧のセットと一致するテキストが含まれます。たとえば、$ 1は、前の正規表現の最初の括弧のセットに含まれていたものと一致します。
$& 最後に成功したパターン一致によって一致した文字列。
$ MATCH
$ ` 最後に成功したパターン一致によって一致したものの前にある文字列。
$ PREMATCH
$ ' 最後に成功したパターン一致によって一致したものに続く文字列。
$ POSTMATCH
$ + 最後の検索パターンと一致する最後の角かっこ。これは、代替パターンのセットのどれが一致したかわからない場合に役立ちます。例:/バージョン:(。*)|リビジョン:(。*)/ &&($ rev = $ +);
$ LAST_PAREN_MATCH

Filehandle特殊変数

$ | ゼロ以外に設定すると、現在選択されている出力チャネルでの書き込みまたは印刷のたびにfflush(3)が強制されます。
$ OUTPUT_AUTOFLUSH
$% 現在選択されている出力チャネルの現在のページ番号。
$ FORMAT_PAGE_NUMBER
$ = 現在選択されている出力チャネルの現在のページ長(印刷可能な行)。デフォルトは60です。
$ FORMAT_LINES_PER_PAGE
$- 現在選択されている出力チャネルのページに残っている行数。
$ FORMAT_LINES_LEFT
$〜 現在選択されている出力チャネルの現在のレポート形式の名前。デフォルトはファイルハンドルの名前です。
$ FORMAT_NAME
$ ^ 現在選択されている出力チャネルの現在のページ上部フォーマットの名前。デフォルトは、_TOPが追加されたファイルハンドルの名前です。
$ FORMAT_TOP_NAME