パッケージ

パッケージの役割

名前空間を定義する。

デフォルトはmainパッケージ

$var = "hoge";
sub func() {
  print "$var\n";
}

#全部同じ値にアクセスしている
print "$var\n";
print "$main::var\n";
&func();
&main::func();

他パッケージからは完全修飾名でアクセス可

package Hoge;
$var = "hoge";
sub func() {
  print "$var\n";
}

package Foo;
print "$var\n"; #undef
print "$Hoge::var\n";
&func(); #undef
&Hoge::func();

our宣言で、完全修飾名でなくてもアクセス可

package Hoge;
our $var = "hoge";
sub func() {
  print "$var\n";
}

package Foo;
print "$var\n";
print "$Hoge::var\n";
&func(); #undef
&Hoge::func();

ourで宣言した変数はレキシカルスコープで、パッケージに属する。

my宣言でパッケージと関係のない変数に

package Hoge;
my $var = "hoge";
sub func() {
  print "$var\n";
}

package Foo;
print "$var\n";
print "$Hoge::var\n"; #undef
&func(); #undef
&Hoge::func();

myで宣言した変数はレキシカルスコープで、パッケージに属さない。