シェル/スクリプト言語お勉強備忘録
Perlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しようPerlを勉強しよう

3−7.グローバル変数とローカル変数

まずは下記のプログラムを見てもらいましょう
#!/bin/perl
$sum = 10;
$foo = 1;
$goo = 2;
$hoo = 3;
$ans = &func($foo,$goo,$hoo);
print "\$ans is $ans. \$sum is $sum.\n";

sub &func {
  $sum = $$_[0]+$_[1]+$_[2];
}
プログラム結果
$ans is 6. $sum is 6.

結果を見てもらいましたがいかがですか?「$sum」の値が「10」のはずですが、関数内で同じ変数を使っているため最初の値である「10」が破壊されています。
これはperl内で使用されている変数は全てグローバル変数として扱われているためです。そのためメインで使用された変数は関数内で使われても同じものと扱われ書き換えが起こると値が変わってしまうことを意味します。
では関数内だけで有効なローカル変数にするにはどのようにすればよいかということになりますが下記の例のようにすることでグローバル変数とローカル変数を区別することができます。

#!/bin/perl
$sum = 10;
$foo = 1;
$goo = 2;
$hoo = 3;
$ans = &func($foo,$goo,$hoo);
print "\$ans is $ans. \$sum is $sum.\n";

sub &func {
  
local($sum);
  $sum = $$_[0]+$_[1]+$_[2];
}

グローバル変数とローカル変数の使い方をマスターすれば柔軟なプログラムを書くことができるようになります。
是非マスターして楽しいperlライフをおくりましょう!


戻る
Perlを勉強しよう