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の使いどころっていうのが、おれ的には未だにピンと来ない。ピンとこないものは無理して使わなくてもいいんではないかと。ええ、まあ、そんな感じで。
どうしても使わざるを得ない状況で、そのときに考える!
で、少しまた、考えて、上のサンプルあまり意味がないような気がしてきたので、もう一つスコープをネストしてみた。>これは次のエントリで。