変数のメインパッケージ内宣言と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