Perl 抛出“参考键是实验性的”

2024-02-14

开发环境为OS X 10.10.3,Perl -v

This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)

这是问题所在

我将项目从本地环境移至 Windows Server,现在出现以下错误:

“参考密钥在 CGI/Router.pm 第 94 行是实验性的。”

该模块的第 94 行显示

my $num_regexes = scalar keys $token_regexes;

整个模块可以在这里找到https://github.com/kristiannissen/CGIRouter https://github.com/kristiannissen/CGIRouter

我像这样实例化路由器模块

$router->add_route( 'GET', '/home', sub {
 print header( -type => 'text/html', -charset => 'utf-8' );

 print "Hello Pussy";
});

我在本地没有这个问题,但现在我正在转移到生产服务器,我遇到了这个问题。据我所知,它与特定的 Perl 版本有关,但在我要求提供商升级 Perl 之前,我想知道是否可以做些什么来避免这个问题?


密钥的文档,perldoc keys http://perldoc.perl.org/functions/keys.html关于在哈希引用上使用键有这样的说法:

从 Perl 5.14 开始,键可以采用标量 EXPR,它必须包含对 unblessed 哈希或数组的引用。该参数将自动取消引用。按键的这一方面被认为是高度实验性的。确切的行为可能会在 Perl 的未来版本中发生变化。

for (keys $hashref) { ... }

为了避免这个问题,升级 Perl 没有帮助。该模块需要更新为以预期方式使用密钥,而不是使用实验性功能。也就是说,在调用之前需要取消引用 hashrefkeys.

具体来说,改变

my $num_regexes = scalar keys $token_regexes;

to

my $num_regexes = scalar keys %$token_regexes;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 抛出“参考键是实验性的” 的相关文章

随机推荐