【しばらく編集不可モードで運営します】 編集(管理者用) | 差分 | 新規作成 | 一覧 | RSS | FrontPage | 検索 | 更新履歴

Perlのour - Perlのourについて。

Perlのourについて。

ourは名前のスコープがmyと同じ(つまりレキシカルスコープ)。 名前のスコープはレキシカルだが、ブロックが終わってもその変数は活きている。

    use strict;

    my $x = 0;

    &func;
    print "outer \$x = $x\n";
    $x++;

    &func;
    print "outer \$x = $x\n";
    $x++;

    &func;
    print "outer \$x = $x\n";
    $x++;

    sub func {
        our $x;
        BEGIN {
            $x = 100;
        }
        print "func  \$x = $x\n";
        $x++;
    }

    func  $x = 100
    outer $x = 0
    func  $x = 101
    outer $x = 1
    func  $x = 102
    outer $x = 2