我可以在Perl 5中使用system
来运行外部程序。我喜欢把system
看作是Perl内部的一个微型“Linux命令行”。然而,我找不到关于Perl 6中system
的文档。它的等效语法是什么?
Perl6实际上有两个命令可以替代Perl 5中的system
。
在Perl6中,shell
将其参数传递给shell,类似于Perl 5的system
当它有一个包含元字符的参数时。
在Perl6中,run
尝试避免使用shell。它将第一个参数作为命令,并将其余参数作为该命令的参数,类似于Perl 5的system
当它有多个参数时。
例如:
shell('ls > file.log.txt'); # Capture output from ls (shell does all the parsing, etc)
run('ls','-l','-r','-t'); # Run ls with -l, -r, and -t flags
run('ls','-lrt'); # Ditto
shell
或 run
替代 Perl 5 中的 system
,您还可以使用 NativeCall
调用 libc 的 system
函数。use NativeCall;
sub system(Str --> int32) is native("msvcr110.dll") { * };
system("echo 42");
system
基本上和 Perl 5 版本一样吗? - Christopher Bottomssystem("echo" "42")
一样传递多个参数吗?(我知道 Windows 的命令行参数处理方式与 Unix 不同。) - Keith Thompsonsystem
需要一个参数 - 在Windows上,您需要使用_exec
family中的函数来避免处理。 - Christophshell
和run
,但提到NativeCall
为与操作系统交互添加了另一个维度,这是我没有考虑过的。因此,我将其标记为被接受的答案。我仍然建议读者查看我的回答以获取快速的shell
和run
概述和示例。 - Christopher Bottoms