通过命令行获取参数§
最简单的方法是使用 @*ARGS 变量从命令行获取参数;此数组将包含程序名称后面的字符串。 %*ENV 将包含环境变量,因此如果您使用
export API_KEY=1967196417966160761fabc1511067
./consume_api.raku
您可以通过以下方式在程序中使用它们
my = <API_KEY> // die "Need the API key";
如果之前未定义环境变量 API_KEY,则此操作将失败。
如果命令行参数代表文件名,Raku 有更好的方法来处理它们:$*ARGFILES 动态变量。
for .lines ->
您可以这样运行此程序 argfiles.raku *.raku,例如,它将在每次找到超过 72 个字符的行时打印一个文件名。$*ARGFILES 包含命令行中描述的所有文件的句柄 - .lines 将依次从每个文件中读取一行,每次处理新句柄时都会更改 $*ARGFILES.path 的值。通常,它为处理文件集的脚本提供了一个非常方便的 API。
交互式获取参数§
使用 prompt 让正在运行的程序向用户查询数据
my UInt = prompt "How many iterations to run: ";
同步和异步运行程序§
有两个例程可以运行外部程序:run 和 shell。两者都存在于 IO 角色中,因此包含在所有混合该角色的类中,例如 IO::Path。两者都返回一个 Proc 对象,但主要区别在于 run 会尽量避免使用系统 shell(如果可能),而 shell 会通过默认系统 shell 运行命令。
运行所有外部程序的关键类是 Proc::Async,它异步运行进程并允许 并发 与正在运行的进程交互。通常,通过这些高级抽象接口与系统交互是一个好习惯。但是,Raku 提供了其他方法通过低级接口与系统交互。
通过本机 API 进行操作系统调用§
NativeCall API 可用于与系统库以及任何其他可访问的库交互。这个 简短教程 解释了如何使用该接口调用系统函数,例如 getaddrinfo;一些其他函数,如 kill,也可以通过使用 NativeCall 接口声明的方式访问。
幸运的是,您不必对所有本机函数都这样做。作为她将 Perl 函数移植到 Raku 作为生态系统一部分的 Butterfly 项目的一部分,Elizabeth Mattijsen 正在将该语言中包含的许多系统函数移植到模块中,例如 P5getprotobyname,其中包括 endprotoent、getprotoent、getprotobyname、getprotobynumber 和 setprotoent 等函数。如果您想在 Raku 中使用这些函数,请搜索并安装 P5 模块。