perl:不能要求从其他perl文件中$value并在第三个perl文件中使用它



所以我有3个perl文件(1.pl,2.pl,3.pl(,我想从2.pl中的循环中需要一个值,并将其打印在3.pl 中

脚本

1.pl

use strict;
use warnings;
require "./2.pl";
sub red {
our $var;
print "try : ";
require "./3.pl"
}

2.pl

use strict;
use warnings;
my @array = ("http://exemple.org", "http://test.org","http://perl.org");
foreach our $var(@array){
chomp ($var);
red();
}
1;

3.pl

use strict;
use warnings;
our $var;
print "3 : $varn";
1;

当我在终端中打开1.pl时,我得到了什么:

try : 3 : http://exemple.org
try : try :

我想要的是:

try : 3 : http://exemple.org
try : 3 : http://test.org
try : 3 : http://perl.org

3.第二个要求似乎不起作用,那我该怎么办?

require关键字将其已加载的文件存储在%INC哈希中。

perl -MData::Dumper -E 'say Dumper %INC'
$VAR1 = {
'Data/Dumper.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/x86_64-linux/Data/Dumper.pm',
'constant.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/constant.pm',
'feature.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/feature.pm',
'strict.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/strict.pm',
'warnings/register.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/warnings/register.pm',
'Exporter.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/Exporter.pm',
'XSLoader.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/XSLoader.pm',
'bytes.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/bytes.pm',
'warnings.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/warnings.pm',
'Carp.pm' => '/home/simbabque/perl5/perlbrew/perls/perl-5.26.1/lib/5.26.1/Carp.pm'
};

当您再次尝试require $same_filename时,它将看到$INC{$same_filename}。如果存在,则中止。

如果您想重新运行同一个文件,可以使用do关键字,它只加载并执行一个文件。这将在每次时从磁盘中重新读取文件。

sub red {
our $var;
print "try : ";
do "./3.pl"
}

请记住,这是非常糟糕的做法。您应该将这些代码移动到一个函数中,并传递词法变量。

最新更新