Rakudo 的行为可以通过(不断增长的)环境变量进行调整;本节尝试记录当前所有正在使用的环境变量。在所有情况下,它们都是解释器特定的,除了某些使用常规名称(如 PATH)的情况。

底层虚拟机也对一系列环境变量敏感;它们列在 此维基页面 中。

影响命令行执行§

  • RAKUDO_OPT

自 2022.02 Rakudo 编译器版本起可用。

RAKUDO_OPT 环境变量提供了一种方法来指定默认的编译器命令行选项,这些选项可以通过命令行上的显式规范来覆盖。例如

    RAKUDO_OPT="-I. --ll-exception" raku -Ilib test.raku

将忽略 -I. 但会遵守 --ll-exception 命令行参数。

使用简单的空格分隔符来分隔参数,因此无法使用包含空格的参数。

模块加载§

  • RAKUDOLIB, RAKULIB

类型:Str.

RAKUDOLIBRAKULIB 将逗号分隔的路径列表追加到模块搜索列表中。RAKUDOLIB 首先被评估。注意:这些环境变量是在 2020.05 版本的 Rakudo 编译器中添加的。已弃用的旧环境变量 PERL6LIB 仍然可用。

  • RAKUDO_MODULE_DEBUG

类型:Bool.

如果为真,则会导致模块加载器将调试信息打印到标准错误。

  • RAKUDO_PRECOMPILATION_PROGRESS

类型:Bool.

自 2012.12 版本的 Rakudo 编译器起可用。

如果为真,则会导致模块加载器将正在重新预编译的模块的名称打印到标准错误。因此,它是 RAKUDO_MODULE_DEBUG 提供的功能的简化版本。

错误消息详细程度和严格性§

  • RAKU_EXCEPTIONS_HANDLER

如果存在,print_exception 例程将使用该名称的类来处理异常以进行输出。Rakudo 目前附带 Exceptions::JSON(通过将此变量设置为 JSON 来调用),以覆盖默认输出。

自 2020.01 版本的 Rakudo 编译器起可用。在此之前,它可用作 PERL6_EXCEPTIONS_HANDLER(在 2023.04 版本的 Rakudo 编译器中已删除)。

旨在用于嵌入 Raku 编程语言的环境,例如 IDE。

    RAKU_EXCEPTIONS_HANDLER=JSON raku -e 'die "foo"'
    # {"X::AdHoc":{"payload":"foo","message":"foo"}}

  • RAKUDO_NO_DEPRECATIONS

类型:Bool.

如果为真,则会抑制由 is DEPRECATED 特性触发的弃用警告。

  • RAKUDO_DEPRECATIONS_FATAL

类型:Bool.

如果为真,则弃用警告将变为抛出的异常。

  • RAKUDO_VERBOSE_STACKFRAME

类型:UInt.

在堆栈帧中显示源代码,周围环绕着指定数量的上下文行;例如 RAKUDO_VERBOSE_STACKFRAME = 1 将使用一行上下文。

  • RAKUDO_BACKTRACE_SETTING

类型:Bool.

控制是否将 .setting 文件包含在回溯中。

影响预编译§

  • RAKUDO_PREFIX

类型:Str.

当设置此选项时,Rakudo 将在指定目录中查找标准存储库(perl、vendor、site)。这旨在作为构建时引导问题的应急措施,其中 Rakudo 可能会被构建为非特权用户,而没有对 NQP 配置中的运行时路径的写入权限。

  • RAKUDO_PRECOMP_DIST

  • RAKUDO_PRECOMP_LOADING

  • RAKUDO_PRECOMP_WITH

这些是将序列化状态传递给子进程中的预编译作业的内部变量。请勿手动设置它们。

  • RAKUDO_LOG_PRECOMP

如果设置为 1,则会发出有关预编译过程的诊断信息。

  • RAKUDO_NO_PRECOMPILATION

如果设置为 1,则会禁用预编译。自 2023.08 版本的 Rakudo 编译器起可用。

REPL (Read-eval-print loop)§

  • RAKU_REPL_OUTPUT_METHOD

这指定了在 REPL 中,如果语句本身没有产生任何输出,则应在语句结果值上调用的方法名称。如果缺失,将假定为 gist。可以使用 raku 强制更直观的、可解析的表示。或者 Str 强制完整的字符串表示。从 Rakudo 编译器 2020.06 版本开始可用。

  • RAKUDO_LINE_EDITOR

这指定了首选使用的行编辑器;有效值为 LineEditorReadlineLinenoise 和 none。如果希望在 REPL 启动时避免推荐消息,则 none 值很有用。

  • RAKUDO_DISABLE_MULTILINE

如果设置为 1,将禁用 REPL 的多行输入。

  • RAKUDO_HIST

这指定了行编辑器使用的历史记录文件的位置;默认值为 ~/.raku/rakudo-history。在 Rakudo 2020.02 版本之前,默认值为 ~/.perl6/rakudo-history

其他§

  • RAKUDO_DEFAULT_READ_ELEMS

这通过设置 $*DEFAULT-READ-ELEMS 动态变量来指定在 IO::Handle 上读取的默认字符数。

  • RAKUDO_ERROR_COLOR

类型:Bool.

控制是否为错误突出显示发出 ANSI 代码。默认情况下,如果未设置,则为 true,但在 Windows 上除外。

  • INSIDE_EMACS

从 Rakudo 编译器 2022.04 版本开始支持。如果使用 true 值指定,则 **不会** 尝试加载 REPL 中的任何行编辑模块。这允许 REPL 更好地集成到 Emacs 环境中(它设置了此环境变量)。

  • RAKUDO_MAX_THREADS

类型:UInt.

指示在创建 ThreadPoolScheduler 时默认使用的线程数。默认情况下为 64,除非似乎有超过 8 个 CPU 内核可用:在这种情况下,默认值为内核数的 8 倍。

从 Rakudo 编译器 2022.06 版本开始,还可以指定 "unlimited" 或 "Inf" 来指示操作系统提供的线程数将是限制因素。

  • TMPDIRTEMPTMP

类型:Str.

如果 $TMPDIR 指向当前用户具有完全访问权限的目录,则 IO::Spec::Unix.tmpdir 方法将返回 $TMPDIR,并以 '/tmp' 作为默认回退。

IO::Spec::CygwinIO::Spec::Win32 使用更适合 Windows 的列表,其中还包括 %TEMP%%TMP% 环境变量。

  • PATHPath

类型:Str.

IO::Spec::Unix.path 方法将像 shell 一样拆分 $PATH;即作为冒号分隔的列表。 IO::Spec::CygwinIO::Spec::Unix 继承了这一点。IO::Spec::Win32.path 将读取 %PATH%%Path% 中第一个定义的变量,作为分号分隔的列表。

  • RAKUDO_SNAPPER

指示遥测快照器拍摄快照的时间间隔。默认值为 .1,即每秒 10 个快照。

  • RAKUDO_HOME

允许覆盖 Raku 安装路径。在可重定位构建中,默认值为 [rakudo_executable_dir]/../share/perl6,在不可重定位构建中,默认值为该文件夹的绝对路径。

  • NQP_HOME

允许覆盖 NQP 安装路径。在可重定位构建中,默认值为 [rakudo_executable_dir]/../share/nqp,在不可重定位构建中,默认值为该文件夹的绝对路径。

WINDOWS 特性§

非控制台应用程序§

在 Windows 上,程序被编译为控制台应用程序或非控制台应用程序。控制台应用程序始终打开一个控制台窗口。没有直接的方法可以抑制此窗口。

Rakudo 提供了一组单独的可执行文件,其后缀为 'w'rakuw.exerakudow.exe 等),这些文件被编译为非控制台应用程序。这些不会生成此控制台窗口。

警告 默认情况下,这些非控制台应用程序将静默地吞并打印到 STDOUTSTDERR 的所有内容。

要接收程序的输出,只需在外部重定向它即可

rakuw.exe script.raku >stdout.txt 2>stderr.txt