通过命令行获取参数§

最简单的方法是使用 @*ARGS 变量从命令行获取参数;此数组将包含程序名称后面的字符串。 %*ENV 将包含环境变量,因此如果您使用

export API_KEY=1967196417966160761fabc1511067
./consume_api.raku

您可以通过以下方式在程序中使用它们

my $api-key = %*ENV<API_KEY> // die "Need the API key";

如果之前未定义环境变量 API_KEY,则此操作将失败。

如果命令行参数代表文件名,Raku 有更好的方法来处理它们:$*ARGFILES 动态变量。

for $*ARGFILES.lines -> $l {
    say "Long lines in {$*ARGFILES.path}"
        if $l.chars > 72 ;
}

您可以这样运行此程序 argfiles.raku *.raku,例如,它将在每次找到超过 72 个字符的行时打印一个文件名。$*ARGFILES 包含命令行中描述的所有文件的句柄 - .lines 将依次从每个文件中读取一行,每次处理新句柄时都会更改 $*ARGFILES.path 的值。通常,它为处理文件集的脚本提供了一个非常方便的 API。

交互式获取参数§

使用 prompt 让正在运行的程序向用户查询数据

my UInt $num-iters = prompt "How many iterations to run: ";

同步和异步运行程序§

有两个例程可以运行外部程序:runshell。两者都存在于 IO 角色中,因此包含在所有混合该角色的类中,例如 IO::Path。两者都返回一个 Proc 对象,但主要区别在于 run 会尽量避免使用系统 shell(如果可能),而 shell 会通过默认系统 shell 运行命令。

运行所有外部程序的关键类是 Proc::Async,它异步运行进程并允许 并发 与正在运行的进程交互。通常,通过这些高级抽象接口与系统交互是一个好习惯。但是,Raku 提供了其他方法通过低级接口与系统交互。

通过本机 API 进行操作系统调用§

NativeCall API 可用于与系统库以及任何其他可访问的库交互。这个 简短教程 解释了如何使用该接口调用系统函数,例如 getaddrinfo;一些其他函数,如 kill,也可以通过使用 NativeCall 接口声明的方式访问

幸运的是,您不必对所有本机函数都这样做。作为她将 Perl 函数移植到 Raku 作为生态系统一部分的 Butterfly 项目的一部分,Elizabeth Mattijsen 正在将该语言中包含的许多系统函数移植到模块中,例如 P5getprotobyname,其中包括 endprotoentgetprotoentgetprotobynamegetprotobynumbersetprotoent 等函数。如果您想在 Raku 中使用这些函数,请搜索并安装 P5 模块