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は大体理解した、と思う。