我的代码中出现uninitialized value in string eq at *** line xxx
警告,如果该行实际存在eq
,则很容易修复。
但是hashref中的值有一个正则表达式匹配。
if ($hashref->{parameters}->{type} =~ m/:/) {
在此之前的一些行我甚至有这个:
$hashref->{parameters} = defined($hashref->{parameters}) ? $hashref->{parameters} : '';
$hashref->{parameters}->{type} = defined($hashref->{parameters}->{type}) ? $hashref->{parameters}->{type} : '';
因此该值至少应初始化。
我问自己和你:为什么我仍然会收到关于价值未初始化的警告,而且为什么会说eq
代替pattern match
修改
parameters
subhash包含通过url输入(post和/或get)给出的所有变量。
type
值是可能在网址中的变量之一。
如果type
值是否在网址中,则无关紧要,如果它包含值,我总是会收到uninitialized value in string eq
警告。即使我通过在有缺陷的线之前警告它来控制线的类型值。
2。编辑:
正如@ikegami认为确实存在导致警告的elsif
整个if-elsif语句看起来像是:
if ($hashref->{parameters}->{type} =~ m/:/) {
…
elsif ($hashref->{parameters}->{type} eq $somevalue) {
…
}
并且$somevalue
是未初始化的。
答案 0 :(得分:6)
你只在该行上显示了一半的陈述。完整的陈述实际上看起来像
456: if ($foo =~ /bar/) {
457: ...
458: }
459: elsif ($baz eq 'qux') {
460: ...
461: }
语句的运行时警告通常使用语句启动时的行号,因此如果正则表达式不匹配且未定义$baz
,则会为{{}获取警告列表行456第459行{1}}。
这是同样的想法:
eq
最近*,Perl已更改,因此$ perl -wE' my $x; # 1
say # 2
4 # 3
+ # 4
$x # 5
+ # 6
5; # 7 '
Use of uninitialized value $x in addition (+) at -e line 2.
9
条件被视为不同的语句,以避免此类问题。您必须拥有旧版本的Perl。
elsif