ためになるホームページ お問い合わせ




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で変数と解釈される



比較演算子
数値や文字列を比較するには、比較演算子を使う

比較 数値演算子 文字列演算子
等しい == eq
等しくない != ne
より小さい < lt
より大きい > gt
以上 <= le
以下 >= ge

ブール値
真(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.