【Perl5】変数・定数

変数の種類

Perl で定義されている変数は、
スカラー変数、配列変数、ハッシュ変数(連想配列変数)などがあります。

変数の種類利用方法プレフィックス
スカラー文字列や数値などの値を1つ格納する$
配列複数の値を順番に保存する@
ハッシュ複数の値を、キーと値のペアで保存する%

変数の宣言

Perl で変数を使う場合には変数を宣言します。
変数の宣言には、プレフィックスに変数名を付けて記述します。

プレフィックス + 変数名

変数の有効範囲

Perl では、変数の宣言を行うと
宣言以降のプログラム中のどこでも使用できるグローバル変数となります。

有効範囲を抜けると変数が使えなくなるようにしておくことでトラブルを未然に回避することが出来ます。

変数が宣言されたブロック内でのみ有効とするには変数宣言の前に「my」を記述します。

似たような動作をするものに「local」がありますが
こちらは、「my」のように新しい変数を生成するわけでなくて
宣言前に同じ名前のグローバル変数があった場合には、
一時的に変数の内容を退避させて、ブロックの終わりで元の値に戻します。

$var = 'サブルーチンの外';
&example;
sub example {
    my $var = 'サブルーチンの中';
    print $var; #「サブルーチンの中」が出力される
    &example2;
}
sub example2 {
    print $var; #「サブルーチンの外」が出力される
}
print $var; #「サブルーチンの外」が出力される
$var = 'サブルーチンの外';
&example;
sub example {
    local $var = 'サブルーチンの中';
    print $var; #「サブルーチンの中」が出力される
    &example2;
}
sub example2 {
    print $var; #「サブルーチンの中」が出力される
}
print $var; #「サブルーチンの外」が出力される

省略時の変数($_)

Perl では、変数名を省略することができます。
省略した場合には、$_ を指定したものとみなされます。

while ($xx = ) {
    if ($xx =~ /^From:/) { print $xx; }
}
while ()  # while ($_ = ) と同じ意味
print;        # print $_; と同じ意味
/^From:/      # $_ =~ /^From:/ と同じ意味

前述のコードは、次のように書くこともできます。

while () {
    if (/^From:/) { print; }
}

定数

Perl で定数を宣言するには、変数の前に「constant」を使います。

定数を式で使った時には、コンパイル時に値に置き換え、さらに式を最適化します。

use constant PI    => 4 * atan2(1, 1);
print "Pi equals PI...\n";
print "Pi equals ".PI."...\n";

環境変数

Perl では、%ENV 変数を使って、
環境変数の値を参照したり設定したりすることができます。

print $ENV{'PATH’}; # 環境変数PATHの値を表示する
$ENV{'TZ’} = “JST-9"; # 環境変数TZに値を設定する

コマンド引数

コマンドラインからの引数を取得するには、次の変数を使うことができます。

@ARGV # 引数の配列
$#ARGV # 配列の個数-1
$ARGV[0] # 最初の引数
$ARGV[$#ARGV] # 最後の引数

その他の特殊変数

$. # ファイルから読み込み時の現在の行数
$/ # 入力時のレコード区切り文字。通常は改行。
$, # 出力時の項目区切り文字。print @xx; の時に有効
$" # 出力時の項目区切り文字。print “@xx"; の時に有効
$\ # 出力時の行末文字。print “$xx"; の後ろに付加される
$# # 出力時の数値形式。通常は"%.20g"。詳細はprintfを参照
$% # 出力時の現在のページ番号
$= # 出力時の現在のライン数
$- # 出力時の残り行数
$~ # 出力時のフォーマット名(デフォルトはハンドル名と同じ)
$^ # 出力時のヘッダフォーマット名
$| # 0以外が代入されると出力をバッファリングしなくなる。
$$ # プロセスID
$? # 最後に実行されたコマンドのステータス
$& # パターンマッチにマッチした部分文字列
$` # パターンマッチにマッチした部分の前側の文字列
$’ # パターンマッチにマッチした部分の後側の文字列
$+ # パターンマッチの最後の()に対応する文字列
$*
$0 # perlスクリプトのコマンド名
$1 # パターンマッチの際の1番目の()に対応する文字列
$[ # 配列の最初の添え字。通常は0。
$] # perlのバージョン情報
$; # 高次元連想配列の添え字の区切り文字
$! # エラー番号、もしくはエラー文字列
$@ # 直前のevalコマンドのエラーメッセージ
$< # このプロセスの実ユーザーID $> # このプロセスの実効ユーザーID
$( # このプロセスの実グループID
$) # このプロセスの実効グループID
$
$^D # デバッグフラグの値
$^F # システムファイルディスクリプタの最大値
$^I # -iオプションで指定した拡張子の名前
$^L
$^P # デバッガが使用する内部フラグ
$^T # スクリプトを実行した時刻
$^W # 警告スイッチの現在値
$^X # perl自身の起動時の名前
@_ # サブルーチンへの引数
@INC # perlライブラリ検索ディレクトリ
%INC # 読み込まれたライブラリファイルの配列
__LINE__ # スクリプト中の現在の行数
__FILE__ # スクリプトのファイル名

Perl5入門

Posted by 管理人