小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

変数のメインパッケージ内宣言とrequire内宣言の参照関係

メインパッケージで宣言された変数とパッケージ宣言なしのrequireされた変数は、別レキシカルスコープになる模様。
したがって、my宣言した変数は相互に参照ができない。
しかし、our宣言した変数はグローバルスコープなので相互に参照ができる。

require.plソース

use strict;
our $xxx = "xxx";
our $aaa = "aaa";
require 'tst_require.pl';
print "main--> ", $xxx, "\n"; # 111が表示(xxxでないのは、tst_require.pl内で変更されている)

tst_require.plソース

use strict;
our $xxx = "111";
print "sub---> ", $main::aaa, "\n"; # aaaが表示(strictでなければメインパッケージ修飾は不要)
return 1;

実行結果

C:\Documents and Settings>perl require.pl
sub---> aaa
main--> 111