gpt4 book ai didi

regex - 正则表达式匹配时出现未初始化的 eq 警告

转载 作者:行者123 更新时间:2023-12-01 11:00:11 25 4
gpt4 key购买 nike

我在我的代码中收到一个 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 子哈希包含所有通过 url 输入(post 和/或 get)给出的变量。type 值是那些可能 位于 url 中的变量之一。type 值是否在 url 中并不重要,如果它包含一个值,我总是会收到一个 uninitialized value in string eq 警告。即使我通过在 buggy 行之前警告它来控制 type 行的值。

<强>2。编辑:正如@ikegami 所假设的那样,确实有一个 elsif 导致了警告

整个 if - elsif 语句看起来有点像:

if ($hashref->{parameters}->{type} =~ m/:/) {

elsif ($hashref->{parameters}->{type} eq $somevalue) {

}

未初始化的是 $somevalue

最佳答案

你在那一行只显示了一半的陈述。完整的声明实际上看起来像

456: if ($foo =~ /bar/) {
457: ...
458: }
459: elsif ($baz eq 'qux') {
460: ...
461: }

语句的运行时警告通常使用语句开始处的行号,因此如果正则表达式不匹配且 $baz 未定义,您将得到警告列表行第 459 行的 eq 为 456。

这里也是一样的思路:

$ 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 条件视为不同的语句以避免此类问题。您必须拥有旧版本的 Perl。

  • ——实际上,不是最近。 5.10 和 5.12 都已停产,但您似乎使用的是更旧的版本。如果您要询问有关已过时版本的 Perl 的问题,请提及它。

$ perlbrew use 5.10.1

$ perl -we'
my ($x,$y,$z);
if ($x) {
} elsif ($y eq $z) {
}'
Use of uninitialized value $y in string eq at -e line 4.
Use of uninitialized value $z in string eq at -e line 4.

$ perlbrew use 5.8.9

$ perl -we'
my ($x,$y,$z);
if ($x) {
} elsif ($y eq $z) {
}'
Use of uninitialized value in string eq at -e line 3.
Use of uninitialized value in string eq at -e line 3.

关于regex - 正则表达式匹配时出现未初始化的 eq 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11780777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com