如何使用Perl ;6.(例如,与Perl中的“system”类似 ;5)

如何使用Perl ;6.(例如,与Perl中的“system”类似 ;5),perl,raku,Perl,Raku,我可以在Perl 5中使用system来运行外部程序。我喜欢把system想象成Perl内部的一个微型“Linux命令行”。但是,我在Perl 6中找不到系统的文档。等价物是什么?Perl6实际上有两个命令,它们取代了perl5 在Perl6中,将其参数传递给shell,类似于perl5的系统,当它有一个包含元字符的参数时 在Perl6中,尝试避免使用shell。它将其第一个参数作为命令,其余参数作为该命令的参数,类似于Perl 5的系统,当它有多个参数时 例如: shell('ls >

我可以在Perl 5中使用
system
来运行外部程序。我喜欢把
system
想象成Perl内部的一个微型“Linux命令行”。但是,我在Perl 6中找不到
系统
的文档。等价物是什么?

Perl6实际上有两个命令,它们取代了perl5

在Perl6中,将其参数传递给shell,类似于perl5的
系统
,当它有一个包含元字符的参数时

在Perl6中,尝试避免使用shell。它将其第一个参数作为命令,其余参数作为该命令的参数,类似于Perl 5的
系统
,当它有多个参数时

例如:

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
另请参见此部分。

除了使用或(从Perl 5中替换)之外,还可以使用来调用libc
系统
函数

在“我的Windows”框中,它看起来如下所示:

use NativeCall;
sub system(Str --> int32) is native("msvcr110.dll") { * };
system("echo 42");

系统
与Perl 5版本基本相同吗?如果必须指定
“msvcr110.dll”
,我认为它的可移植性不是很好。您能否向它传递多个参数,如Perl 5的
系统(“echo”“42”)
?(我知道Windows不像Unix那样处理命令行参数。)@ChristopherBottoms:不,它是C标准库中的一个;要获得Perl5,您需要@KeithThompson:no,
system
需要一个参数-在Windows上,您需要一个函数来避免处理我正在寻找的
shell
run
,但提到
NativeCall
会为与操作系统的交互增加另一个维度,我没有考虑到这一点。因此,我认为这是公认的答案。我仍然建议读者也可以快速查看
shell
run
概述和示例。