local
というわけでourを理解してからのlocal再び。
localよ、私は帰ってきた!
http://d.hatena.ne.jp/perlcodesample/20080309/1205078496
# localの役割は、パッケージ変数を一時的に保存して、
# 後で、復元することにある。# 他言語のローカル変数とは、何の関係もない。
# lacal の後にくる変数は、パッケージ変数であって、レキシカル変数ではない
# localは、一見、変数宣言のように見えるが、変数宣言ではない。
# 変数宣言に使えるのは、Perlでは、my と our だけである。
おさらい。
#!/usr/bin/perl use strict; use warnings; our $myour = 10; print "$myour\n"; # scope { local $myour = 20; print "main::-> $main::myour\n"; print "scope-> $myour\n"; } print "$myour\n";
C:\MyWorks\Perl\local>perl local1.pl 10 main::-> 20 scope-> 20 10
あたりまえだけどパッケージ変数自体を覗いてもちゃんと20になってる。
サブルーチンをまたいでも大丈夫。
#!/usr/bin/perl use strict; use warnings; our $myour = 10; print "$myour\n"; fnc1(); sub fnc1 { local $myour = 20; print "main::-> $main::myour\n"; print "fnc1-> $myour\n"; fnc2(); } sub fnc2 { print "main::-> $main::myour\n"; print "fnc2-> $myour\n"; } print "$myour\n";
C:\MyWorks\Perl\local>perl local2.pl 10 main::-> 20 fnc1-> 20 main::-> 20 fnc2-> 20 10
というわけでlocalは大体理解した、と思う。