看起来像Perl CGI错误

时间:2016-07-05 18:49:17

标签: perl popup cgi

Perl版本5.8.5我有:

my @dt = qw( 1 0 );
my %dt = qw( 1 single 0 multi );
my $val = 0;

$cgi->popup_menu( {
    -name    => "test",
    -default => $val,
    -values  => \@dt,
    -labels  => \%dt,
} )

弹出窗口中的一切正常,但“选中”永远不会设置。 所以始终选择第一个val。

如果我进行了更改,并在所有情况下都将0更改为2($val@dt%dt),那么一切正常,我就会被“选中” HTML标记。

此外,我将代码应用到Perl 5.8.8框中,它在那里零一起工作?我是否需要让我们的系统管理员在5.8.5盒子上使用Perl版本?

2 个答案:

答案 0 :(得分:5)

您可以通过CPAN独立更新CGI perl本身。

如果您包含相关的使用语句和模块版本以及示例HTML输出,那将会很方便。

更新:看起来你的perl版本应该使用CGI 3.05(参见Module :: CoreList)。检查CGI的更改日志,我们发现这是一个已知错误。

  

版本3.45,2009年8月14日   [BUG修复]   3.允许0用作popup_menu()中的默认值。这从3.37开始被打破。感谢Haze,他是第一个报告此问题并提供补丁的人,还有pfschill,他们在错误发布时进行了精确定位。还增加了对此的回归测试。 (RT#37908)

(他们可能没有正确解剖(重新)错误的介绍)

P.S。而不是单独设置@dt只需将-values设置为[ sort keys %dt ]

答案 1 :(得分:3)

您可能是正确的,并且您正在运行较早版本的CGI模块

perl -MCGI -e 'print $CGI::VERSION, "\n"'会产生什么?在v5.8.8系统上?

我正在运行CGI版本4.28,结果看起来正确

<select name="test" >
<option value="1">single</option>
<option selected="selected" value="0">multi</option>
</select>

无论如何,你可能会从升级中获益,因为即使Perl v5.8.8已经超过十年了,但如果它更容易,你应该只能升级CGI模块。事实上,该模块现已弃用,不再是核心模块,因此必须在安装CGI之后升级到Perl v5.24以重新获得设施

CGI功能永远不应该与HTML生成组合在一个模块中,即使是那些继续使用CGI(它被广泛认为已被PSGI取代)的人也更喜欢使用像{{3}这样的单独模块} 要么 CGI::SimpleCGI::Minimal HTML::Tiny 用于生成HTML

belg4mit has identified您发现的错误已在CGI模块的3.4.5版本中得到修复,该版本最初是作为Perl v5.11.0(开发版本)的一部分发布的。随后的第一个公开Perl版本是v5.12,其中包含模块的版本3.4.8

由于您发现Perl v5.8.8的安装没有显示问题,因此很可能在该机器上升级CGI模块而不依赖于Perl