如果我运行perl程序并使用反引号调用另一个perl程序,则来自被调用程序的print语句不会出现在终端上。
如果我使用'system'调用程序,则会显示print语句。
EG: 这是ProgA.pl
print "In ProgA.pl, about to call ProgB.pl";
my $dum=`ProgB.pl`; # print output doesn't appear
### $dum=system("ProgB.pl"); # this prints OK
print"\nBack in ProgA.pl";
print "\ndum = $dum"; # ProgB's output doesn't show here either
(没有警告或错误,通过文件关联找到perl.exe)
这是ProgB.pl:
print "\nPrinting from ProgB.pl";
差异的原因是什么?
为什么$ dum中没有返回反引号调用输出(我尝试了STDOUT和STDERR)?如果我在反引号中调用dir,我的输出为$ dum。
答案 0 :(得分:2)
您有路径问题。
它按预期工作($dum
被赋值为" Printing from ProgB.pl
")如果我将反引号从ProgB.pl
更改为./ProgB.pl
。没有明确的./
路径,它会搜索系统路径并生成错误,因为您可以看到是否将该行更改为
my $dum=`ProgB.pl` or die $!;
生成输出
In ProgA.pl, about to call ProgB.plNo such file or directory at ./ProgA.pl line 4.
因此再次说明您应该始终检查系统调用的返回值是否有错误条件。
答案 1 :(得分:1)
看来,由于未能在ProgB中的print命令末尾添加换行符,我在返回ProgA之前无法刷新缓冲区。感谢Chris Turner。