our
次のキーワードを使用してグローバル変数を宣言できます。
our $var = 42;
各グローバル変数には、どこからでもアクセスできる完全修飾名があります。完全な名前は、パッケージ名に変数名を加えたものです。その時点でまだパッケージを宣言していない場合は、 packagemain
にいます。これは、先頭の に短縮できます::
。したがって、上記の変数には名前があります
$var # inside package main
$main::var # This is most obvious
$::var # This may be a good compromise
別のパッケージを使用していた場合、プレフィックスは変更されます。
package Foo;
our $bar = "baz";
# $Foo::bar from anywhere,
# or even $::Foo::bar or $main::Foo::bar
接頭辞なしで変数を使用したいが、他のパッケージの下で使用したい場合は、それをエクスポートする必要があります。これは通常、サブクラス化によって行われExporter
ます。@Davids の回答を参照してください。ただし、これは d されているパッケージからの変数のみを提供できuse
、その逆ではありません。例えば
Foo.pm
:
package Foo;
use strict; use warnings;
use parent 'Exporter'; # imports and subclasses Exporter
our $var = 42;
our $not_exported = "don't look at me";
our @EXPORT = qw($var); # put stuff here you want to export
# put vars into @EXPORT_OK that will be exported on request
1;
script.pl
:
#!/usr/bin/perl
# this is implicitly package main
use Foo; # imports $var
print "var = $var\n"; # access the variable without prefix
print "$Foo::not_exported\n"; # access non-exported var with full name
( で宣言された) レキシカル変数my
は、グローバルに一意の名前を持たず、静的スコープの外ではアクセスできません。また、 では使用できませんExporter
。