ishiducaの日記 このページをアンテナに追加 RSSフィード

2008-11-06

[][][]localを使おうとして怒られた 16:42 localを使おうとして怒られた - ishiducaの日記 を含むブックマーク はてなブックマーク - localを使おうとして怒られた - ishiducaの日記 localを使おうとして怒られた - ishiducaの日記 のブックマークコメント

use strict;
my $str = 'GROBAL';
&PUT();
sub PUT{
    local $str = 'local';
    print $str."¥n";
}
print $str; 

ってやったら、"Can't localize lexical variable $str at - line 5." って怒られた。my を使っちゃいけないらしい。んな訳で

str = 'GROBAL';
&example();
sub example{
    local $str = 'local';
    print $str."¥n";
}
print $str;

結果

local
GROBAL

成功


追記(2009.05.10)

「local」はサブルーチンの中で、グローバル変数の中身を一時的にどこかへ移動して、その代わりに別の値を使う。サブルーチンから抜けると、元の値に戻すものでした。(今更...)

なので、この書き方の方がいいんだろうね

#!/usr/bin/perl -wl
use strict;
our $str ='GROBAL'; # our宣言で、グローバル変数に設定
&example();
sub example{
    local $str = 'local'; # local宣言して、グローバル変数の値を一時的に退避
    print $str;
}    
print $str;
exit 0;
トラックバック - http://perl.g.hatena.ne.jp/ishiduca/20081106