2 つの基本的な Perl 変数タイプがあります。
my
- これらはレキシカルスコープです。これは、それらが定義されている場所に応じて存在したり消えたりすることを意味します。レキシカル スコープの変数は、それらが含まれるブロックでのみ定義されます。ファイルで定義されている場合、そのファイルからのみアクセスできます。
our
- これらはパッケージ変数です。パッケージは、コードのその領域 (通常はファイル全体) に固有の名前空間を作成する Perl にすぎません。
Perl では、パッケージ内にいる場合、プレフィックスなしで変数を使用できます。それ以外の場合は、変数 (およびサブルーチン名) の前にパッケージ名を付ける必要があります。File::Find's
$File::Find::dir . That's the
$dir variable in the
File::Find` パッケージを考えてみてください。
するときは、 (パッケージ変数の場合) または(レキシカル スコープ変数の場合) のuse strict;
いずれかで変数を宣言するか、その変数の完全なパッケージ名を使用する必要があります。our
my
source.pl
use strict;
use warnings;
our $var = 22;
test.pl
use strict;
use warnings;
do "source.pl";
our $var; #Merely a declaration -- Doesn't change the value
my $local_var = $var;
print "$local_var\n";
あなたもこれを行うことができました:
use strict;
use warnings;
no warnings qw(once);
do "source.pl";
my $local_var = $main::var; #Specified full package name of variable
print "$local_var\n";
一度だけ使用されるno warnings qw(once);
警告を削除するために使用する必要がありました。$main::var