连接的一般行为

时间:2013-08-07 14:02:47

标签: perl concatenation system-calls

我正在尝试将pdflatex作为来自Perl脚本的系统调用运行。 就像在Using system()中所说的那样,应该使用system("command", "arg1", "arg2", "arg3");执行外部程序来直接运行它并避免打开子shell。当我这样做时

system("pdflatex", "LaTexFile", ">& stdout.txt") == 0 or die "pdflatex failed with exit code $?";

输出未写入stdout.txt,而是打印到终端(STDOUT)。所以我试过

system("pdflatex " . "LaTexFile " . ">& stdout.txt") == 0 or die "pdflatex failed with exit code $?";

哪个有效。

How to concatenate strings with Perl概述了如何在Perl中连接。但它没有说明方法的差异。当我定义东西时,我通常会像my $var = "name_$othervar";那样做,所以我甚至不使用大括号。

感谢任何解释。

1 个答案:

答案 0 :(得分:5)

你回答了自己的问题。 “直接跑,避免打开 subshel​​l“>&是一个shell语法,如果不是,则不解释 使用shell执行该命令。

第二种情况有效,因为这是传递单身时的行为 system()的参数(打开一个shell)。顺便说一句,看看有什么 您链接到的页面说:

  

system()接受标量或数组作为参数。如果是论点   是一个标量,system()使用shell来执行命令(/bin/sh -c command);如果参数是一个数组,它会直接执行命令,