簡體   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