所以我有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"
}
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
3.pl
use strict;
use warnings;
our $var;
print "3 : $var\n";
1;
Run Code Online (Sandbox Code Playgroud)
我在终端打开1.pl时得到的结果:
try : 3 : http://exemple.org
try : try :
Run Code Online (Sandbox Code Playgroud)
而我想得到的是:
try : 3 : http://exemple.org
try : 3 : http://test.org
try : 3 : http://perl.org
Run Code Online (Sandbox Code Playgroud)
看起来3.pl的第二个要求不起作用,所以我该怎么办?
该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'
};
Run Code Online (Sandbox Code Playgroud)
当你require $same_filename再次尝试时,它将会看到$INC{$same_filename}.如果存在,它就会中止.
如果要重新运行同一个文件,可以使用do关键字,而只是加载并执行文件.这将每次从磁盘重新读取文件.
sub red {
our $var;
print "try : ";
do "./3.pl"
}
Run Code Online (Sandbox Code Playgroud)
请记住,这是非常糟糕的做法.您应该将此代码移动到一个函数中并传递词法变量.
| 归档时间: |
|
| 查看次数: |
33 次 |
| 最近记录: |