为什么在使用反引号

时间:2018-01-18 06:29:47

标签: perl output backquote

如果我运行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。

2 个答案:

答案 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。