グローバルな特殊変数
変数名use English デフォルト 解説利用法など
$_ $ARG デフォルトで入力やパターンマッチの対象になる特殊変数です。
$. $INPUT_LINE_NUMER / $NR [入出力関連] ファイルハンドルの現在の行数
※ファイルハンドルを明示的にクローズすると行番号もリセットされます。
$/ $INPUT_RECORD_SEPARATOR / $RS \n [入出力関連] 入力時のレコード区切り文字 $/ を未定義値にすると、ファイルの内容を一度に読み込むことができます。
undef $/;
open FILEHANDLE, "read.txt";
$text = ; # すべての行を $text に代入
$, $OUTPUT_FIELD_SEPARATOR / $OFS [入出力関連] 出力フィールドの区切り文字
$, = '-';
print 1, 2, 3;
> 1-2-3 
$\ $OUTPUT_RECORD_SEPARATOR / $ORS NULL [入出力関連] 出力時の行末文字
$\ = "\n";
print "Hello Perl World !"; 
$" $LIST_SEPARATOR

" "

空白文字

[入出力関連] 出力フィールドの区切り文字
$, と同じですが、$" は配列値を展開する際に使えます。
@list = (1, 2, 3);
$" = ',';
print "@list\n";
> 1,2,3
$; $SUBSCRIPT_SEPARATOR / $SUBSEP \034 ハッシュのインデックスの区切り文字
$^A $ACCUMULATOR 書き出しアキュムレータの現在値
write でフォーマットを呼び出したあとにアキュムレータの内容を出力します。
$# $OFMT [不要] 出力時の数値形式
$? $CHILD_ERROR 最後に実行されたコマンドのステータス値
$! $OS_ERROR / $ERRNO システムコールのエラー値
システムコール呼び出し時に発生したエラー番号、もしくはエラー文字列を格納します。
# カレントディレクトリの移動
chdir( $ENV{'HOME'} ) or die $!;
$@ $EVAL_ERROR eval のエラーメッセージ
eval "require $class" or die $@; 
$$ PerlのプロセスID
$< $REAL_USER_ID PerlのプロセスのユーザーID
$> $ERRECTIVE_USER_ID | $EUID Perlのプロセスの実効ユーザーID
$( $REAL_GROUP_ID / $GID PerlのプロセスのグループID
カレントプロセスの実グループIDが格納されています。グループが複数の場合、すべてのリストを格納します。実グループIDは、プログラムファイルのオーナーのグループIDです。
$) $EFECTIVE_GROUP_ID / $EGID Perlのプロセスの実効グループID
カレントプロセスの実行グループIDが格納されています。グループが複数の場合、すべてのリストを格納します。実行グループIDは、プログラムを実行しているユーザのグループIDです。
$0 $PROGRAM_NAME Perl スクリプトのコマンド名
$[ 0 [不要] 配列の最初のインデックスと、部分文字列の先頭文字のインデックス
$] $PERL_VERSION Perl のバージョン番号
$^D $DEBUGGING デバッグフラグの値
$^E $EXTENDED_OS_ERROR オペレーティングシステムのエラー情報
$^F $SYSTEM_FD_MAX システムファイル記述子の最大値
$^H 現在の構文チェック内容
一部のプラグ間モジュールで有効な内部的なコンパイラヒントを格納します。
$^I $INPLACE_EDIT -i オプションで指定したバックアップファイルの拡張子
書き戻し編集でバックアップファイルにつける拡張子を指定します。書き戻し編集を禁止するには undef を指定します。
$^M 緊急のメモリバッファ
メモリ不足の際に $^M で設定した領域をバッファとして使えます。$^M を利用するには、Perl のコンパイル時に -DPERL_EMERGENCY_SBRK を指定する必要があります。
次のようにして1Mバイトの緊急用のバッファを割り当てることができます。
$^M = ' ' x( x ** 20);
$^0 オペレーティングシステム名
$^P デバッガが使用する内部フラグ
$^R パターンにマッチした位置指定正規表現の結果
$^T スクリプトを実行した時刻
エポック(1970年1月1日午前0時)からの秒数で表現されます。
print $^T; 
$^W 警告スイッチ(-w)の現在値を示す論理値
警告スイッチを指定していると TRUE、それ以外は FALSE の値を格納します。
#!/usr/local/bin/perl -w
print $^W; 
$^X Perl の起動時の名前
print $^X;
> /usr/local/bin/perl 
$ARGV <>を使って読み取っているファイルの名前
@line = <>;
print $ARGV; 
@_ サブルーチンへの引数

 

ファイルハンドルに関する特殊変数
変数名 use FileHandle デフォルト
$^L $FORMAT_FORMFEED \f [フォーマット関連] 改ページ文字
$: $FORMAT_LINE_BREAK_CHARACTERS [フォーマット関連] 折り返し文字
この変数に格納されている文字のあとに、折り返して次の行にフィールドを継続できます。
$| use English : $OUTPUT_AUTOFLUSH autoflush HANDLE EXPR 0 [入出力関連] 出力の自動フラッシュ
0 以外が代入されると出力をバッファリングしなくなります。
pipe( R, W ):
W->autoflush(1);
$% $FORMAT_PAGE_NUMBER format_page_number HANDLE EXPR [フォーマット関連] 現在のページ番号
$= $FORMAT_LINES_PER_PAGE format_lines_per_page HANDLE EXPR 60 [フォーマット関連] 現在のページ行数
$- $FORMAT_LINES_LEFT format_lines_left HANDLE EXPR [フォーマット関連] ページの残り行数
$~ $FORMAT_NAME format_name HANDLE EXPR ファイルハンドル名 [フォーマット関連] フォーマット名
$^ $FORMAT_TOP_NAME format_top_name HANDLE EXPR ファイルハンドル名の後に _TOP を追加した名称 [フォーマット関連] ヘッダのフォーマット名


グローバルな特殊配列と特殊ハッシュ

@ARGV スクリプトに渡されたコマンドライン引数 スクリプトを「% perl script.pl a b」のようにオプションをつけて起動した場合、次のようにその値を使うことができます。
print @ARGV; 
@INC Perlライブラリ検索ディレクトリ 自作のライブラリの場所をPerlに記憶させる場合は次のようにします。
push( @INC, '/home/user/LIB' ); 
これで「/home/user/LIB」にあるライブラリが自動的に読み込まれるようになります。
%INC do や require によってインクルードされたライブラリファイル名
ハッシュのキーは指定したファイル名で、value は実際に見つかった場所です。
%ENV 環境変数の値
while ( my($key, $value) = each %ENV ){
    print "key:$key value:$value\n";
}
%SIG シグナルのシグナルハンドラ
local $SIG{__WARN__} = sub{}; # warn を無効
local $SIG{__DIE__} = sub{}; # die を無効 

グローバルな特殊ファイルハンドル
ARGV コマンドラインで指定されたファイル名のリスト コマンドラインで指定されたファイル名のリスト @ARGV を順番に読み込むための特殊ファイルハンドルです。通常、このファイルハンドルから入力を行うときは、空のファイルハンドルを使います。
while( <> ){
    print $_, "\n";
}
STDERR 標準エラー用のファイルハンドル
STDIN 標準入力用のファイルハンドル
STDOUT 標準出力用のファイルハンドル
DATA __END__ 以降のテキストを読み込む特殊ファイルハンドル スクリプトが格納されているファイルのうち、 __END__ トークン以降の部分を読むための特殊ファイルハンドルです。
最後に実行したstat、lstat、ファイルテスト演算子が読み込んだ情報をキャッシュするのに用いる特殊ファイルハンドルです。

グローバルな特殊定数
__END__ プログラムの論理的な終わり これ以降に続くテキストは全て無視されるが、DATAファイルハンドルで読み込むことができます。
__FILE__ このトークンがおかれている時点でプログラムのファイル名 文字列中には展開されません。
__LINE__ 現在の行番号 文字列中には展開されません。
__PACKAGE__ コンパイル時の現在のパッケージ名 現在のパッケージがなければ未定義値です。 文字列中には展開されません。

パターンマッチに関する特殊変数
$n パターンマッチの際のn番目のカッコに対応する文字列
$x =~ /^\d+\t(\w+)\t(\w+)\t(\w+)\n$/;
my ($f1, $f2, $f3) = ($1, $2, $3);
$& $MATCH パターンマッチにマッチした文字列
$` $PREMATCH パターンマッチにマッチした部分の前側の文字列
$' $POSTMATCH パターンマッチにマッチした部分の後側の文字列
$+ $LAST_PAREN_MATCH パターンマッチの最後のカッコに対応する文字列
$x =~ /^\d+\t(\w+)\t(\w+)\t(\w+)\n$/;
$field = $+;
$* $MULTILINE_MATCHING [不要] 複数行検索
$* を 1 に設定すると、複数行にまたがって検索できます。