所以我有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"
}
请记住,这是非常糟糕的做法。您应该将这些代码移动到一个函数中,并传递词法变量。