在 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/