2

我正在尝试将 pdflatex 作为 Perl 脚本的系统调用运行。就像在使用 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";所以我什至不使用大括号。

任何解释表示赞赏。

4

1 回答 1

5

你是在自问自答。 “直接运行并避免打开子shell”。这>&是一种 shell 语法,如果您不使用 shell 来执行该命令,则不会对其进行解释。

第二种情况有效,因为这是将单个参数传递给system()(打开外壳)时的行为。顺便说一下,看看你链接到的页面是什么意思:

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

于 2013-08-07T14:09:37.870 回答