Perlのuseで大文字小文字

例えば、こんなモジュールを作ったとして、

# Parent.pm
package Parent
use strict;
use warnings;

our $NAME = __PACKAGE__;

1;

適当に使う側を書いて、

# test.pl
use strict;
use warnings;
use Parent;

print $Parent::NAME, "\n";

実行すると、

$ perl test.pl
Name "Parent::NAME" used only once: possible typo at test.pl line 6.
Use of uninitialized value $Parent::NAME in print at test.pl line 6.

こんなこと言われちゃいます。

何故でしょう?

答え

大文字小文字が区別されないファイルシステムでは、parent.pmがロードされてしまうから。

調べてませんが、他の言語でも同じことが起きるかもしれません。

以下、参考までに。

  • WindowsのNTFSは大文字小文字を区別しません。
  • MacNFS+では、オプションとして大文字小文字を区別することもできるようですが、通常、大文字小文字を区別しません。*1
  • Linuxext4では、大文字小文字が区別されます。

*1:区別するとAdobe系ソフトがバグるらしい