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版本?
答案 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::Simple
和CGI::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