ourにmyにlocalか

まんどくさいから、あえてlocalに関しては無視してきた。どうしても必要な箇所って今までなかったしなあ。

プログラミングperlには、

ourは名前をスコープ内に限定し、localは値をスコープ内に限定し、myは名前と値の両方をスコープ内に限定する。

とある。

すこし、まじめに考えてみようと思って、おれなりにサンプルを書く。

local と my - IT戦記の続き
local と my の違いが分かるサンプルを書いてみた

amachang氏ほどかっこよいサンプルではないけど。

#!/usr/bin/perl

use strict;
use warnings;

$\ = "\n";

our $var = 'our';

sub func() {
        $var = 'func';
        print $var;
}

print $var;

scope_a: {
        local $var = 'local';
        print $var;
        func();
        print $var;
}

scope_b: {
        my $var = 'my';
        print $var;
        func();
        print $var;
}

print $var;

実行結果

our    # グローバルスコープ、アタリマエの結果
local  # scope_aでlocal宣言、アタリマ(ry
func   # グローバルスコープで、func()にて、funcと代入。予想通り。
func   # 「localは値をスコープ内に限定」なるほど。名前では限定されないので、グローバルで代入した結果が生きている。
my     # scope_bでmy宣言、当然。
func   # グローバルスコープで、func()にて、funcと代入。予想通り。
my     # で、ここがlocalとの違い。「myは名前と値の両方をスコープ内に限定」の説明どおり。
func   # グローバルで代入してんだから当然だわな。「ourは名前をスコープ内に限定」確かに。

はあ、なるほど。「ourは名前をスコープ内に限定し、localは値をスコープ内に限定し、myは名前と値の両方をスコープ内に限定する。」まさに、この通りの結果。

しかし、localの使いどころっていうのが、おれ的には未だにピンと来ない。ピンとこないものは無理して使わなくてもいいんではないかと。ええ、まあ、そんな感じで。

どうしても使わざるを得ない状況で、そのときに考える!

で、少しまた、考えて、上のサンプルあまり意味がないような気がしてきたので、もう一つスコープをネストしてみた。>これは次のエントリで。