通过命令行获取参数§
最简单的方法是使用 @*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
模块。