師匠の散歩

Perlで遊ぼう

特殊変数の一覧

Perlには、短縮して使用できる特殊変数というものがある。便利だが、予約語になっていることをちゃんと理解しておかないと、痛い目にあうことになるかもしれない。たぶんそんなことにはならないだろうが、とりあえず一覧表を集めてみた。有名どころ(とほほ)から始めて、Englishモジュールのエイリアスも掲載した。まあ、特殊変数を表示するコーディングをしてくれればいいんだが、Perlでは暗黙の変数として、$_や@_は表示しなくてもよいらしいので、変数が無いセンテンスも作成可能だ。わかればカッコいいんだが、無料配布CGIでそれをやられると初心者には辛いものがある。

説明者によって、表現が異なるのが面白い。Telnetが使えれば、Perlの説明文を英文で読めるそうであるが、表示のさせ方が分からないのでリンクは貼らずにおく。

なお、この文章の文字コードは「EUC-JP」を使用しており、エスケープ文字の¥(円)キーは\(バックスラッシュ)で表示される。

特殊変数一覧表
English Moduleのエイリアス名
http://www.cs.cf.ac.uk/Dave/PERL/node144.html
 http://www.tohoho-web.com/wwwperl1.htmhttp://liweijing.blogspot.com/2008/01/perl.html
Miscellaneous 
$ARG$_$_ デフォルトで入力やパターンマッチの対象になる特殊変数
@ARG@_@_サブルーチンへの引数サブルーチンへの引数
  $ARGV <>を使って読み取っているファイルの名前
  @ARGV スクリプトに渡されたコマンドライン引数
$LIST_SEPARATOR$"$"出力時の項目区切り文字出力フィールド(配列)の区切り文字
$SUBSCRIPT_SEPARATOR or $SUBSEP$;$;高次元連想配列の添え字の区切り文字ハッシュのインデックスの区切り文字
  $[配列の最初の添え字配列の最初のインデックスと、部分文字列の先頭文字のインデックス
  @INCperlライブラリ検索ディレクトリPerlライブラリ検索ディレクトリ
  %INC読み込まれたライブラリファイルの配列do や require によってインクルードされたライブラリファイル名
  %ENV 環境変数の値
  &SIG シグナルのシグナルハンドラ
Regular Expression or Matching 
$MATCH$&$&パターンマッチにマッチした部分文字列パターンマッチにマッチした文字列
$PREMATCH$`$`パターンマッチにマッチした部分の前側の文字列パターンマッチにマッチした部分の前側の文字列
$POSTMATCH$'$'パターンマッチにマッチした部分の後側の文字列パターンマッチにマッチした部分の後側の文字列
$LAST_PAREN_MATCH$+$+パターンマッチの最後の()に対応する文字列パターンマッチの最後のカッコに対応する文字列
  $nパターンマッチの際のn番目の()に対応する文字列パターンマッチの際のn番目のカッコに対応する文字列
perl 5.10以降は非実装 $* 複数行検索
Input 
$INPUT_LINE_NUMBER or $NR$.$.ファイルから読み込み時の現在の行数ファイルハンドルの現在の行数
$INPUT_RECORD_SEPARATOR or $RS$/$/入力時のレコード区切り文字。通常は改行。入力時のレコード区切り文字
Output 
$OUTPUT_AUTOFLUSH$|$|0以外が代入されると出力をバッファリングしなくなる。出力の自動フラッシュ
$OUTPUT_FIELD_SEPARATOR or $OFS$,$,出力時の項目区切り文字出力フィールドの区切り文字
$OUTPUT_RECORD_SEPARATOR or $ORS$\$\出力時の行末文字出力時の行末文字
Formats 
$FORMAT_PAGE_NUMBER$%$%出力時の現在のページ番号現在のページ番号
$FORMAT_LINES_PER_PAGE$=$=出力時の現在のライン数現在のページ行数(デフォルトは60)
$FORMAT_LINES_LEFT$-$-出力時の残り行数ページの残り行数
$FORMAT_NAME$~$~出力時のフォーマット名(デフォルトはハンドル名と同じ)フォーマット名
$FORMAT_TOP_NAME$^$^出力時のヘッダフォーマット名ヘッダのフォーマット名
$FORMAT_LINE_BREAK_CHARACTERS$:$: 折り返し文字
$FORMAT_FORMFEED$^L$^L 改ページ文字
perl 5.10以降は非実装 $#出力時の数値形式。通常は"\%20g"
  __LINE__スクリプト中の現在の行数現在の行番号
  __FILE__スクリプトのファイル名プログラムのファイル名
  DATA __END__ 以降のテキストを読み込む特殊ファイルハンドル
  __END__ プログラムの論理的な終わり
  __PACKAGE__ コンパイル時の現在のパッケージ名
Error Status 
$CHILD_ERROR$?$?最後に実行されたコマンドのステータス最後に実行されたコマンドのステータス値
$OS_ERROR or $ERRNO$!$!エラー番号、もしくはエラー文字列システムコールのエラー値
$EVAL_ERROR$@$@直前のevalコマンドのエラーメッセージeval のエラーメッセージ
Process Information 
$PROCESS_ID or $PID$$$$プロセスIDPerlのプロセスID
$REAL_USER_ID or $UID$<$<このプロセスの実ユーザーIDPerlのプロセスのユーザーID
$EFFECTIVE_USER_ID or $EUID$>$>このプロセスの実効ユーザーIDPerlのプロセスの実効ユーザーID
$REAL_GROUP_ID or $GID$($(このプロセスの実グループIDPerlのプロセスのグループID
$EFFECTIVE_GROUP_ID or $EGID$)$)このプロセスの実効グループIDPerlのプロセスの実効グループID
$PROGRAM_NAME$0 $0 perlスクリプトのコマンド名Perl スクリプトのコマンド名
Internal Variables 
$PERL_VERSION$]$]perlのバージョン情報Perl のバージョン番号
$ACCUMULATOR$^A$^A 書き出しアキュムレータの現在値
$DEBUGGING$^D$^Dデバッグフラグの値デバッグフラグの値
  $^E オペレーティングシステムのエラー情報
$SYSTEM_FD_MAX$^F$^Fシステムファイルディスクリプタの最大値システムファイル記述子の最大値
  $^H 現在の構文チェック内容
$INPLACE_EDIT$^I$^I=-iオプションで指定した拡張子の名前-i オプションで指定したバックアップファイルの拡張子
  $^M 緊急のメモリバッファ
  $^O オペレーティングシステム名
$PERLDB$^P$^Pデバッガが使用する内部フラグデバッガが使用する内部フラグ
  $^R パターンにマッチした位置指定正規表現の結果
$BASETIME$^T$^Tスクリプトを実行した時刻エポック(1970年1月1日午前0時)からの秒数
$WARNING$^W$^W警告スイッチの現在値警告スイッチ(-w)の現在値を示す論理値
$EXECUTABLE_NAME$^X$^Xperl自身の起動時の名前Perl の起動時の名前

Englishモジュールを使用すると、実行速度が遅くなるようだ。特に構文間違いを回避するために、次のような記載をするように指導している。

use English '-no_match_vars';

戻る
2010 grandmaster all rights reserved. 最終更新:2010/12/28