特定版本中的 Perl 警告?

标签 perl

在 Perl 脚本的顶部,可以编写use v5.14,如果解释器比该版本更旧,它将因错误而退出,而不是尝试(徒劳地)执行依赖于尚不存在的功能的脚本。此外,这允许添加新功能,而不会破坏预期能够使用新关键字作为标识符的旧脚本。然而,据我所知,这并不能阻止 Perl 发明新的警告,因此在旧版本中运行时没有警告的代码将在新版本中发出警告。有没有办法要求“请不要发出新警告”?诚然,这个上下文是愚蠢的:我想使用 smartmatch 运算符,它被追溯声明为实验性的,而且我不想输入这个丑陋的东西:

否,如果 $] >= 5.017011,警告 => 'experimental::smartmatch'

编辑:脚注:我实际上使用的是 FATAL => 'all',诚然它有自己的问题,但它保证警告会被注意到。幸运的是,这是一个用户脚本(想想 grep 或 diff),所以有人可以对此做一些事情

最佳答案

I want to use the smartmatch operator

不要!智能匹配的设计已被破坏,它将被删除或以向后不兼容的方式更改。请参阅this .


Is there a way to ask for "no new warnings please"?

没有。您可以明确指定要获取哪些类别的警告,但这只会阻止新类别,而不会阻止现有类别中的新警告。

实际上不是您所要求的,但您可以使用 $SIG{__WARN__} Hook 过滤警告。当然,这比一行代码要多得多。


I don't want to type this ugly thing

如果您使用 5.18+,以下内容就足够了:

no warnings qw( experimental::smartmatch );

如果您可能没有 5.18,那么您仍然可以使用来稍微简化

no if $] >= 5.018, warnings => qw( experimental::smartmatch );

使用Import::Into ,您还可以创建仅使用简单的 use 替换以下样板的模块:

use strict;
use warnings;
use feature qw( switch );
no if $] >= 5.017011, warnings => qw( experimental::smartmatch );

关于特定版本中的 Perl 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45331498/

相关文章:

xml - 我应该如何在 Perl 中解析大型 XML 文件?

perl - 使用通配符和变量在 perl 中通配

perl - 是否有 'official' CPAN 规范文档?

python - 计算两个模式之间的重复记录

windows - 如何在 Windows 上以另一个用户身份生成进程?

perl - 在 Perl 中如何使用变量作为哈希键?

perl - 同一个 nginx 虚拟主机中的几个 (fastcgi/uwsgi/scgi/proxy_pass) Mojolicious 应用程序的示例?

mongodb - 如何捕获 Perl MongoDB 驱动程序的连接错误?

arrays - 如何在 perl 中对二维数组进行自定义排序?

perl - 我可以从 perl 向 POS 打印机发送 ESC d 命令吗?