Perl の特殊変数


一部の特殊変数は Perl 言語で定義されており、通常は $、@、または % の接頭辞が付けられます (例: $_)。

多くの特殊変数には長い英語名が付いており、オペレーティング システム変数 $! として記述できます。

英語名の特殊変数を使用したい場合は、プログラムの先頭に use English; を追加する必要があります。これにより、説明的な英語の特殊変数を使用できるようになります。

最も一般的に使用される特殊変数は $_ で、これにはデフォルトの入力とパターン マッチングの内容が含まれます。例は次のとおりです。

#!/usr/bin/perl

foreach ('Google','php','Taobao') {
	print $_;
	print "\n";
}

上記のプログラムを実行すると、出力結果は次のようになります。

Google
php
Taobao

次の例では、内容の出力に $_ を使用しません。

#!/usr/bin/perl

foreach ('Google','php','Taobao') {
	print;
	print "\n";
}

上記のプログラムを実行すると、出力結果は次のようになります:

Google
php
Taobao

この例では、最初に「Google」を出力し、次に「php」を出力し、最後に「Taobao」を出力します。

反復ループでは、現在のループの文字列が $_ に配置され、print を通じて出力されます。さらに、print は出力変数を指定せず、デフォルトで $_ が使用されます。

ここでは、指定されていない場合でも Perl が $_ を想定する場所をいくつか示します:

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

  • print()やunlink()などの様々なリスト関数。

  • 「=~」演算子を使用しないパターン マッチング操作「m//」、「s///」、「tr///」。

  • は、他の変数が指定されていない場合の、「foreach」ループのデフォルトの反復変数です。

  • grep() 関数と map() 関数の暗黙的な反復変数。

  • 「while」に条件が 1 つだけあり、その条件が「」操作の結果をテストする場合、$_ が入力レコードを保存するデフォルトの場所になります。これは、「while」テスト条件以外では起こりません。 (ニーモニック: 特定の操作ではアンダースコアを省略できます。)


特殊変数のタイプ

特殊変数の使用の性質に従って、それらは次のカテゴリに分類できます:

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

  • グローバル配列の特殊変数。

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

  • グローバル特殊ファイルハンドル。

  • グローバル特殊定数。

  • 正規表現の特殊変数。

  • ファイルハンドルの特殊変数。

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

以下は、特殊文字と英語の変数を含む、すべてのスカラー特殊変数のリストです:

。 $REAL_USER_ID または $UID $ >現在のプロセスの実効ユーザー ID $EFFECTIVE_USER_ID または $EUID$(実際のグループ ユーザー ID現在のprocess$REAL_GROUP_ID または $GID$)現在のプロセスの実効グループユーザー ID $EFFECTIVE_GROUP_ID または $EGID$0スクリプトのファイル名が含まれます実行中$PROGRAM_NAME$[配列の配列 要素の添字。デフォルトは 0。 $^Dデバッグフラグの値 $デバッグ$^E 非 UNIX 環境での OS 拡張エラー メッセージ$EXTENDED_OS_ERROR$^F$SYSTEM_FD_MAX$^ H $^I組み込みコントロールエディタの値$INPLACE_EDIT$^M$^Oオペレーティングシステム名$OSNAME$^P現在のデバッグ値を指定する内部変数$PERLDB$^T更新今世紀初めから、スクリプトの実行が開始された秒単位の時間$BASETIME$^W警告スイッチの現在値$WARNING$ ^X Perl バイナリ実行可能コードの名前$EXECUTABLE_NAME$ARGV デフォルトのファイルハンドルから読み取るときの現在のファイル名
$_デフォルトの入力およびパターンマッチングコンテンツ。
$ARG
$.最後に読み取られたファイルハンドルの現在の行番号
$NR
$/レコード区切り文字を入力します。デフォルトは改行文字です。 undef 変数を使用すると、ファイルの終わりが読み取られます。
$RS
$,出力フィールド区切り文字
$OFS
$出力レコード区切り文字
$ORS
$"変数は次のとおりです$ と似ていますが、配列の値を二重引用符で囲まれた文字列 (または同様の補間文字列) に補間するために使用する必要があります。 $LIST_SEPARATOR
マルチをシミュレートするときに使用される区切り文字です。 -次元配列はデフォルトでは「」です。
$OFMT
$?前の外部コマンドのステータスを返します
$CHILD_ERROR
$!この変数の数値はerrnoの値であり、の文字列値は、対応するシステム エラー文字列
$OS_ERROR または $ERRNO
$@ コマンド eval のエラー メッセージです。空の場合は、最後の eval コマンドが正常に実行されたことを意味します
$eval_error
$$現在のperlスクリプトを実行しているプロセスID
$]Perlのバージョン番号
$PERL_VERSION
ファイル バンドル記述子の最大値
コンパイラによってアクティブ化された構文ステータスの確認

バックアップメモリ​​プールのサイズ

グローバル配列スペシャル変数

@ARGVスクリプトに渡されるコマンドラインパラメータのリスト@INCモジュールのインポート時に検索されるディレクトリのリスト@F配列入力コマンドラインの
グローバルハッシュ特殊変数

ハッシュテーブル%INCには、doまたはrequireステートメントに含まれるすべてのファイルが含まれます。キーはファイル名で、値はパスです。このファイルに現在の環境変数が含まれますシグナルのリストとその処理方法

グローバル特殊ファイル ハンドル

%INC

%ENV

%SIG

ARGV

配列変数 @ARGV 内のすべてのファイル名を反復処理するための特殊ファイル ハンドル

STDERR

標準エラー出力ハンドル

標準入力

標準入力ハンドル

STDOUT

標準出力ハンドル

DATA

特殊ファイルハンドルは、スクリプトコンテンツを含むファイル内の __END__ フラグ以降のものを参照します。または、インクルード ファイルの __DATA__ フラグ以降のすべてを参照します。同じパッケージ内のデータを読み取る限り、__DATA__ が存在します。

_ (アンダースコア)

特殊なファイル ハンドルは、ファイル情報 (fstat、stat、lstat) をキャッシュするために使用されます。

グローバル特殊定数

__END__

スクリプトの論理的な終了。次のテキストは無視されます。

__FILE__

現在のファイル名

__LINE__

現在の行番号

__PACKAGE__

現在のパッケージ名、デフォルトのパッケージ名がメインです。

正規表現の特殊変数

$n

最後のパターン一致のn番目の部分文字列が含まれます

$&

前回成功したパターン一致の文字列

$MATCH

$`

最後に正常に一致した部分文字列の前のコンテンツ

$PREMATCH

$'

前回の試合は成功しましたその後の内容はsubstring

$POSTMATCH

$+

前の正規表現検索パターンに一致する最後の括弧。例:

/Version: (.*)|Revision: (.*)/ && ($rev = $+);

$LAST_PAREN_MATCH

ファイルハンドル特殊変数

$|

ゼロに設定すると、各関数 write または print が呼び出された後、関数 fflush が自動的に呼び出され、書き込まれた内容をファイルに書き戻します

$OUTPUT_AUTOFLUSH

$%

現在の出力ページ番号

$FORMAT_PAGE_NUMBER

$=

各ページ。デフォルトは60です。

$FORMAT_LINES_PER_PAGE

$-

現在のページに残っている行数

$FORMAT_LINES_LEFT

$~

現在のレポートの名前出力フォーマット。デフォルト値はファイルハンドル名です。

$FORMAT_NAME

$^

現在のレポート出力ヘッダー形式の名前。デフォルト値は、接尾辞「_TOP」が付いたファイルハンドル名です。

$FORMAT_TOP_NAME