-2

インポートした .pm ファイルの変数を使用できます。.pl ファイルの変数を使用できます。しかし、コードに「use strict」を追加すると、機能しませんでした。

私は次のことを試しました

source.pl
{
    var = 22;
}
1;

main.pl

use strict;
my $ref = do "source.pl";
my ($mainvar) = @$ref{ qw(var) };
print "$mainvar\n";

ここでは、$mainvar を空の文字列として出力します。助けてください

4

1 に答える 1

0

2 つの基本的な Perl 変数タイプがあります。

  • my- これらはレキシカルスコープです。これは、それらが定義されている場所に応じて存在したり消えたりすることを意味します。レキシカル スコープの変数は、それらが含まれるブロックでのみ定義されます。ファイルで定義されている場合、そのファイルからのみアクセスできます。
  • our- これらはパッケージ変数です。パッケージは、コードのその領域 (通常はファイル全体) に固有の名前空間を作成する Perl にすぎません。

Perl では、パッケージ内にいる場合、プレフィックスなしで変数を使用できます。それ以外の場合は、変数 (およびサブルーチン名) の前にパッケージ名を付ける必要があります。File::Find's$File::Find::dir . That's the$dir variable in theFile::Find` パッケージを考えてみてください。

するときは、 (パッケージ変数の場合) または(レキシカル スコープ変数の場合) のuse strict;いずれかで変数を宣言するか、その変数の完全なパッケージ名を使用する必要があります。ourmy

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

于 2013-08-20T19:10:38.453 に答える