![]() |
![]() |
TOP > Perl > スカラー変数 |
![]() |
![]() |
スカラー変数とは?
1個の値を格納する変数。スカラー変数は、識別子の前に"$"をつける。識別子に使用できる文字は、英文字・数字・アンダーライン。
スカラー変数の例
$aaa = 3; # $Aaa = 5; #これら二つは別々の意味 $str = "Hello World!"; #文字列 スカラー変数の標準出力
print()演算子を使い、スカラー変数の内容を出力することができる。
print識別子の例
print "Hello World\n"; print 6 * 7; print "This", "is" , "the pen"; #コンマで区切って、print識別子に複数の値を渡す事ができる。 スカラー変数を文字列に展開
ダブルクォート文字列内では、スカラー変数は展開される。スカラー変数に文字列がセットされてない時は、空文字列となる。また、単独変数でprint出力する際は、わざわざダブルクォートで囲む必要はない。
スカラー変数の前後に文字があり、スカラー変数名かどうかがわからない場合がある。perlにスカラー変数を解釈させたい時は、変数をブレースで囲む必要がある。
スカラー変数の展開の例
$str = "Hello"; #文字列 print "$str World!\n"; #文字列の出力 print "$str $kara_str"; #空文字の出力 print "$str"; #単独変数をダブルクォートで囲む print $str; #単独変数のときは、この書き方の方が望ましい print '$str' . "\n"; #シングルクォートだと文字列の展開は行われない print "$strdayo uhehe\n"; #$strdayoがスカラー変数と解釈される print "${str}dayo uhehe\n";#$strで変数と解釈される 比較演算子
数値や文字列を比較するには、比較演算子を使う
ブール値
真(true)と偽(false)は、perlの中では以下のように決められる
undefは偽
数値の0は偽で、それ以外は真
空文字は偽で、それ以外は真。但し文字'0'は偽
chomp演算子
ある変数の末尾の改行文字を取り除く。chomp演算子は実際は関数なので値を返す。返す値はとり除いた文字の個数(意味のない。。。)。
もし、末尾に改行が2個ある場合は、末尾の1個だけが取り除かれる
chomp演算子の例
$str = "this is a pen\n"; chomp $str; #()でくくる必要はない。 未定義値
変数は値がセットされるまでは、未定義値(undef)が設定される。数値の場合は「0」が、文字列の場合は「空文字」として振舞う。
undefの例
$sum; #この時点ではundef $sum += 1; #最初は「0」として振舞うので、sumは「1」 $str .= "this is a pen"; #$strは空文字として振舞うから、連結したら「this is a pen」となる $str = undef; #未定義値にする defined関数
変数がundefかどうかを調べる。undefなら偽を返し、そうでなければ真を返す
definedの例
$str; if (defined($str)) { print "undefではありません。"; } else { print "undefです。"; } my演算子
my演算子を使って変数を宣言すると、それらの変数は全てローカル変数(レキシカル変数)化され宣言したブロック内が有効範囲となる。
my演算子の例
sub rev_func { my($x, $y); #my演算子で、レキシカル変数の宣言 ($x, $y) = @_; #引数をmy演算子に入れる #以下のコードは、上記の2行と一緒 #my($x, $y) = @_; if ($x < $y) { $x..$y; } else { reverse $y..$x; } } @array = rev_sub(9, 3); local演算子
local演算子を使って変数を宣言すると、以前に同じ名前で宣言していた値を一時的にスタックして(以前保持していた値を隠す)、値を入れ替える。その後、local宣言を抜けた際には、一時的にスタックしていた元の値に戻す。
local演算子の例
sub max { #local宣言でグローバルな$a, $bの値は格納される。 #もし、local宣言しない場合は、サブルーチン呼出し後に、$a, $bの値は書き換えられる local($a, $b) = @_; #以下省略... } $a = 3; $b = 5; $val = &max(5, 7); localとmyの違い
localはサブルーチン内での動作に影響を与える(すなわち、local宣言の変数はグローバル)が、myはサブルーチンの外部からアクセスできない。
localとmyの例
$test "global"; &output; #"global"と出力 &output_local; #"local"と出力 &output_my; #"global"と出力 sub output { print "$test"; } sub output_local { local($test) = "local"; &output; } sub output_my { my($test) = "my"; &output; } |
![]() |
![]() |
Copyright 2007 ためになるホームページ All Rights Reserved. |