perl - 如何在 perl 5.24 中关闭 "when is experimental ..."?

标签 perl

下面的代码是直接从 perldoc.perl.org 上的当前 perlsyn 页面复制而来的。 [我根据需要添加了一个初始化和声明以使其运行(并且它按预期工作),但重点是'when'关键字]

Perl 5.24 提示“何时”是实验性的。 很公平,但我不想每次使用关键字时都看到这个。

没有警告 qw(experimental::when) 不起作用 - “未知警告类别 ...”

我也尝试过“切换”作为类别

是否有其他方法可以抑制此警告(除了一般禁用警告)?

use v5.14;
for ($var) {
    $abc = 1 when /^abc/;
    $def = 1 when /^def/;
    $xyz = 1 when /^xyz/;
    default { $nothing = 1 }
}

最佳答案

您可以通过

启用此构造而不会发出警告
use experimental 'switch';

或仅通过

禁用“实验性”警告类别
no warnings 'experimental::smartmatch';

(参见 full list of available warning categories in perldoc warnings)。

但请注意,smartmatch、givenwhen 构造被认为从根本上被破坏,并且正在被删除/重新设计。当您在其他 perl 版本上运行该代码时,仅消除警告就会破坏您的代码。

相反,请更愿意明确地拼出这段代码:

for ($var) {
    if    (/^abc/) { $abc = 1 }
    elsif (/^def/) { $def = 1 }
    elsif (/^xyz/) { $xyz = 1 }
    else { $nothing = 1 }
}

是的,它更丑陋,但它也适用于 $var 的所有值和所有 Perl5 版本。

关于perl - 如何在 perl 5.24 中关闭 "when is experimental ..."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49328308/

相关文章:

perl - 使用Perl搜索并替换文件中的特定字符串

Perlbrew 错误 : Can't Locate Pod/Usage. 下午

perl - 如何将一个以破折号开头的值发送到 Getopt::Long?

perl - CPAN 中是否有一个使用现代 Perl 技术实现基于 REST 的 API 的模块示例?

perl - 使用 LWP::UserAgent 发布到表单没有响应(moSTLy)

regex - 用 eval 替换并通过对字符串长度进行分组来重复字符?

perl - 节省内存和编译时间

linux - perl sdl 模块安装失败

perl - 我是否必须释放用 newHV 创建的 HV*?

perl - 检查到 websocket 的连接是否仍然使用 Net::Async::WebSocket 打开