Perlの変数について質問させて下さい。


my等のスコープ指定をせずに、例えば$variable = 10等とした場合、
この変数はどのような扱いになるのでしょうか。(perlがどのように扱うか)
最近までourと同じかと思っていたのですが間違っていました。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/10/22 15:10:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:makeworld No.1

回答回数75ベストアンサー獲得回数23

ポイント60pt

現在のパッケージのグローバル変数として扱われます。パッケージを変更すると、変更後のパッケージのグローバル変数を参照します。

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

Re: perl - myとourとscopeと - Tociyuki::Diary

  • id:b-wind
    すでにある回答は our の説明であって無修飾の変数の説明は入ってないよね。

    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 も付いていない変数は
    使わない(使えない)んだけどね。
  • id:taichino0730
    すいません、自分で検証する時間が取れないままに質問が終了になってしまいました。
    makeworld様,b-wind様 ありがとうございました。頂いた情報を元に理解を進めたいと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません