2部 Perl言語仕様

特殊変数一覧

特殊変数一覧

※強調した特殊変数はよく使われるものです。

グローバルな特殊変数

$_

use English: $ARG

デフォルトで入力やパターンマッチの対象になる特殊変数です。

$.

use English: $INPUT_LINE_NUMER / $NR

[入出力関連] ファイルハンドルの現在の行数

※ファイルハンドルを明示的にクローズすると行番号もリセットされます。

$/

use English: $INPUT_RECORD_SEPARATOR / $RS

[入出力関連] 入力時のレコード区切り文字

デフォルト値は改行文字です。

$/ の使い方

$/ を未定義値にすると、ファイルの内容を一度に読み込むことができます。

undef $/;
open FILEHANDLE, "read.txt";
$text = <FILEHANDLE>; # すべての行を $text に代入

$,

use English: $OUTPUT_FIELD_SEPARATOR / $OFS

[入出力関連] 出力フィールドの区切り文字

$, の使い方

$, = '-';
print 1, 2, 3;
> 1-2-3

$\

use English: $OUTPUT_RECORD_SEPARATOR / $ORS

[入出力関連] 出力時の行末文字

デフォルト値は NULL です。

$\ の使い方

$\ = "\n";
print "Hello Perl World !";

$"

use English: $LIST_SEPARATOR

[入出力関連] 出力フィールドの区切り文字

デフォルト値は空白文字です。$, と同じですが、$" は配列値を展開する際に使えます。

$" の使い方

@list = (1, 2, 3);
$" = ',';
print "@list\n";
> 1,2,3

$;

use English: $SUBSCRIPT_SEPARATOR / $SUBSEP

ハッシュのインデックスの区切り文字

デフォルト値は \034 です。

$^L

use FileHandle: $FORMAT_FORMFEED

[フォーマット関連] 改ページ文字

デフォルト値は \f です。

$:

use FileHandle: $FORMAT_LINE_BREAK_CHARACTERS

[フォーマット関連] 折り返し文字

この変数に格納されている文字のあとに、折り返して次の行にフィールドを継続できます。

$^A

use English: $ACCUMULATOR

書き出しアキュムレータの現在値

write でフォーマットを呼び出したあとにアキュムレータの内容を出力します。

$#

use English: $OFMT

[不要] 出力時の数値形式

$?

use English: $CHILD_ERROR

最後に実行されたコマンドのステータス値

$!

use English: $OS_ERROR / $ERRNO

システムコールのエラー値

システムコール呼び出し時に発生したエラー番号、もしくはエラー文字列を格納します。

$! の使い方

# カレントディレクトリの移動
chdir( $ENV{'HOME'} ) or die $!;

$@

use English: $EVAL_ERROR

eval のエラーメッセージ

$@ の使い方

eval "require $class" or die $@;

$$

PerlのプロセスID

$<

use English: $REAL_USER_ID

PerlのプロセスのユーザーID

$>

$ERRECTIVE_USER_ID
$EUID

Perlのプロセスの実効ユーザーID

$(

use English: $REAL_GROUP_ID / $GID

PerlのプロセスのグループID

カレントプロセスの実グループIDが格納されています。グループが複数の場合、すべてのリストを格納します。実グループIDは、プログラムファイルのオーナーのグループIDです。

$)

use English: $EFECTIVE_GROUP_ID / $EGID

Perlのプロセスの実効グループID

カレントプロセスの実行グループIDが格納されています。グループが複数の場合、すべてのリストを格納します。実行グループIDは、プログラムを実行しているユーザのグループIDです。

$0

use English: $PROGRAM_NAME

Perl スクリプトのコマンド名

$[

[不要] 配列の最初のインデックスと、部分文字列の先頭文字のインデックス

デフォルト値は 0 です。

$]

use English: $PERL_VERSION

Perl のバージョン番号

$^D

use English: $DEBUGGING

デバッグフラグの値

$^E

use English: $EXTENDED_OS_ERROR

オペレーティングシステムのエラー情報

$^F

use English: $SYSTEM_FD_MAX

システムファイル記述子の最大値

$^H

現在の構文チェック内容

一部のプラグ間モジュールで有効な内部的なコンパイラヒントを格納します。

$^I

use English: $INPLACE_EDIT

-i オプションで指定したバックアップファイルの拡張子

書き戻し編集でバックアップファイルにつける拡張子を指定します。書き戻し編集を禁止するには undef を指定します。

$^M

緊急のメモリバッファ

メモリ不足の際に $^M で設定した領域をバッファとして使えます。$^M を利用するには、Perl のコンパイル時に -DPERL_EMERGENCY_SBRK
を指定する必要があります。

$^M の使い方

次のようにして1Mバイトの緊急用のバッファを割り当てることができます。

$^M = ' ' x( x ** 20);

$^0

オペレーティングシステム名

$^P

デバッガが使用する内部フラグ

$^R

パターンにマッチした位置指定正規表現の結果

$^T

スクリプトを実行した時刻

エポック(1970年1月1日午前0時)からの秒数で表現されます。

$^T の使い方

print $^T;

$^W

警告スイッチ(-w)の現在値を示す論理値

警告スイッチを指定していると TRUE、それ以外は FALSE の値を格納します。

$^w 使い方

#!/usr/local/bin/perl -w

print $^W;

$^X

Perl の起動時の名前

$^X の使い方

print $^X;
> /usr/local/bin/perl

$ARGV

<>を使って読み取っているファイルの名前

$ARGV の使い方

@line = <>;
print $ARGV;

@_

サブルーチンへの引数


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

@ARGV

スクリプトに渡されたコマンドライン引数

@ARGV の使い方

スクリプトを「% perl script.pl a b」のようにオプションをつけて起動した場合、次のようにその値を使うことができます。

print @ARGV;

@INC

Perlライブラリ検索ディレクトリ

@INC の使い方

自作のライブラリの場所をPerlに記憶させる場合は次のようにします。

push( @INC, '/home/user/LIB' );

これで「/home/user/LIB」にあるライブラリが自動的に読み込まれるようになります。

%INC

do や require によってインクルードされたライブラリファイル名

ハッシュのキーは指定したファイル名で、value は実際に見つかった場所です。

%ENV

環境変数の値

%ENV の使い方

while ( my($key, $value) = each %ENV ){
    print "key:$key value:$value\n";
}

%SIG

シグナルのシグナルハンドラ

%SIG の使い方

local $SIG{__WARN__} = sub{}; # warn を無効
local $SIG{__DIE__} = sub{}; # die を無効


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

ARGV

コマンドラインで指定されたファイル名のリスト

コマンドラインで指定されたファイル名のリスト @ARGV を順番に読み込むための特殊ファイルハンドルです。通常、このファイルハンドルから入力を行うときは、空のファイルハンドルを使います。

ARGV の使い方

while( <> ){
    print $_, "\n";
}

STDERR

標準エラー用のファイルハンドル

STDIN

標準入力用のファイルハンドル

STDOUT

標準出力用のファイルハンドル

DATA

__END__ 以降のテキストを読み込む特殊ファイルハンドル

スクリプトが格納されているファイルのうち、 __END__ トークン以降の部分を読むための特殊ファイルハンドルです。

_

最後に実行したstat、lstat、ファイルテスト演算子が読み込んだ情報をキャッシュするのに用いる特殊ファイルハンドルです。


グローバルな特殊定数

__END__

プログラムの論理的な終わり

これ以降に続くテキストは全て無視されるが、DATAファイルハンドルで読み込むことができます。

__FILE__

このトークンがおかれている時点でプログラムのファイル名

文字列中には展開されません。

__LINE__

現在の行番号

文字列中には展開されません。

__PACKAGE__

コンパイル時の現在のパッケージ名

現在のパッケージがなければ未定義値です。 文字列中には展開されません。


パターンマッチに関する特殊変数

$n

パターンマッチの際のn番目のカッコに対応する文字列

$n の使い方

$x =~ /^\d+\t(\w+)\t(\w+)\t(\w+)\n$/;
my ($f1, $f2, $f3) = ($1, $2, $3);

$&

use English: $MATCH

パターンマッチにマッチした文字列

$`

use English: $PREMATCH

パターンマッチにマッチした部分の前側の文字列

$'

use English: $POSTMATCH

パターンマッチにマッチした部分の後側の文字列

$+

use English: $LAST_PAREN_MATCH

パターンマッチの最後のカッコに対応する文字列

$+ の使い方

$x =~ /^\d+\t(\w+)\t(\w+)\t(\w+)\n$/;
$field = $+;

$*

use English: $MULTILINE_MATCHING

[不要] 複数行検索

$* を 1 に設定すると、複数行にまたがって検索できます。


ファイルハンドルに関する特殊変数

$|

use English: $OUTPUT_AUTOFLUSH

autoflush HANDLE EXPR

[入出力関連] 出力の自動フラッシュ

0 以外が代入されると出力をバッファリングしなくなります。

$| の使い方

pipe( R, W ):
W->autoflush(1);

$%

use FileHandle: $FORMAT_PAGE_NUMBER

format_page_number HANDLE EXPR

[フォーマット関連] 現在のページ番号

$=

use FileHandle: $FORMAT_LINES_PER_PAGE

format_lines_per_page HANDLE EXPR

[フォーマット関連] 現在のページ行数(デフォルトは60)

$-

use FileHandle: $FORMAT_LINES_LEFT

format_lines_left HANDLE EXPR

[フォーマット関連] ページの残り行数

$~

use FileHandle: $FORMAT_NAME

format_name HANDLE EXPR

[フォーマット関連] フォーマット名

 デフォルト値はファイルハンドル名と同じです。

$^

use FileHandle: $FORMAT_TOP_NAME

format_top_name HANDLE EXPR

[フォーマット関連] ヘッダのフォーマット名

 デフォルト値はファイルハンドル名の後に _TOP を追加した名称になります。

関連記事