IT戦記 このページをアンテナに追加 RSSフィード Twitter

2008-01-09

local と my

すっきりした>< - YoshioriのBlog

このエントリの

our 名前をスコープに限定. local 値をスコープに限定. my 名前と値の両方をスコープに限定

は、ものすごく分かりやすいし正しいと思うんですけど、たぶん昔の僕だったら理解出来なかったかもしれません><

our 名前をソース上のスコープに限定. local 値をスタック上のスコープに限定. my 名前と値の両方をソース上のスコープに限定

なら、理解しやすいと思います><

今でも local 宣言のあるスコープ内で関数呼出しがあると混乱するの僕なのです><

追記

弾さんが反応してるので、追記

404 Blog Not Found:perl - myとourとscopeと

えっと

僕の「ソース上のスコープ」という言葉が良くなかったです><ごめんなさい

そういう意味で言ったわけではなくて、「ソース上の(なんらかの記述の位置で決まる範囲の)スコープ」という意味で言葉を使いました。

この意味だとどうでしょうか?

レキシカルスコープ、ダイナミックスコープという言葉を使わずに説明したかったのです。言葉が下手ですみません。

以下の package 宣言の有効な範囲(パッケージの範囲)もソース上のなんらかの記述の位置で決まる範囲ですよね。

以下のコードを見てみましょう。何と表示されるでしょうか。

{
  package Foo;
  our $bar = 'baz';
}
our $bar = 'drink';
warn $bar;
warn $Foo::bar;

「ソースに限定する」あるいは「ファイルに限定する」のだとしたら、この挙動はありえないはずです。

404 Blog Not Found:perl - myとourとscopeと

あと、以下の部分が分かりませんでした><

何でも省略できそうなPerlで、なぜif(){ ... }elsif(){ ... }else{ ... }の{}が、CやJavaScriptのように省略できない仕様になっているかの理由の一つが、これです

404 Blog Not Found:perl - myとourとscopeと

ファイルスコープとブロックスコープと if と elsif の {} とどう関係があるのか今イチ分かりません><(すみません。

続き書きました

my と local のサンプル - IT戦記

tkurotkuro 2008/01/10 10:43 アセンブラの基礎、特にレジスタのスタックへの退避、とか勉強するとさらにさらに理解が深まるかも?

nanasinanasi 2008/01/10 18:35 「{}は、問答無用でスコープを作る = block scope」
とあっちに書いてあります。

if(1){
my $foo = ’bar’
}
print $foo;

を実行すれば分かると思います。

amachangamachang 2008/01/10 18:54 挙動は分かりますが、 if に変数のスコープが必要な理由が分かりません。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。