my等のスコープ指定をせずに、例えば$variable = 10等とした場合、
この変数はどのような扱いになるのでしょうか。(perlがどのように扱うか)
最近までourと同じかと思っていたのですが間違っていました。
現在のパッケージのグローバル変数として扱われます。パッケージを変更すると、変更後のパッケージのグローバル変数を参照します。
our宣言した変数は、パッケージを変更してもour宣言時点のパッケージのグローバル変数を参照し続けます。
#!/usr/bin/perl our $a; $a = 'main'; $b = 'main'; package foo; our $a; $a = 'foo'; $b = 'foo'; package bar; { our $a; $a = 'bar'; $b = 'bar'; } warn $a; # => $foo::a warn $b; # => $bar::b package main; warn $a; # => $foo:a warn $b; # => $main::b
コメント(2件)
http://perldoc.jp/docs/perl/5.10.0/perlmod.pod
>修飾されていない動的識別子(dynamic identifiers)はその名前空間に存在するようになります
http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod
>our は単純名を、現在のスコープ内で使うために、現在のパッケージのパッケージ変数と結び付けます。
ドキュメントには記述があるようだけど正直違いがよくわからんかった。
もっとも現在の作法では use strict 前提だから my も our も付いていない変数は
使わない(使えない)んだけどね。
makeworld様,b-wind様 ありがとうございました。頂いた情報を元に理解を進めたいと思います。