我知道我可以使用require并以不同的方式执行此操作,但我只是在玩perl并遇到了一些我不知道如何解释的事情。
这是我的第一个脚本:
use 5.16.2;
use warnings;
sub get
{
print "hello";
}
get();
测试脚本:
use 5.16.2;
use warnings;
my $val=system('perl test.pl');
print "$val\n";
#prints: hello0, I surmised that 0 is the return code for system
我抬头看看如何忽略0并得到了一些错误的东西,但是让我想到了这个:
print '', system('perl test.pl');
#also prints hello0
my $val='', system('perl test.pl');
print "$val\n";
#prints: hello
这有效,但我完全不知道为什么。我也很困惑为什么它前面的那个不起作用。有人可以解释一下吗?
答案 0 :(得分:3)
此:
print '', system('perl test.pl');
使用两个参数调用print
,即''
(空字符串:无效)和system('perl test.pl')
(评估为0
,如您所见,前提是{ {1}}成功运行。)
使用更多括号更明确,您可以将上面的内容写成:
perl test.pl
或者你可以把它写成:
print('', system('perl test.pl'));
此:
my $val = system 'perl test.pl'; # prints 'hello', sets $val to zero
print '', $val; # prints zero
将my $val='', system('perl test.pl');
声明为局部变量并将其设置为$val
(空字符串),并且(无关)调用''
。使用括号显示:
system('perl test.pl')
或者:
(my $val = ''), system('perl test.pl');