繁体   English   中英

Perl抛出“引用上的键是实验性的”

[英]Perl throws “keys on reference is experimental”

开发环境是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

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

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

 print "Hello Pussy";
});

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

key, perldoc keys的文档说明了如何在哈希引用上使用键:

从Perl 5.14开始,密钥可以采用标量EXPR,它必须包含对未经处理的散列或数组的引用。 该参数将自动解除引用。 钥匙的这个方面被认为是高度实验性的。 在未来的Perl版本中,确切的行为可能会发生变化。

 for (keys $hashref) { ... } 

为避免此问题,升级Perl无济于事。 需要更新模块以按预期方式使用密钥,而不是使用实验性功能。 也就是说,它需要在调用keys之前取消引用hashref。

具体来说,改变

my $num_regexes = scalar keys $token_regexes;

my $num_regexes = scalar keys %$token_regexes;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM