【问题标题】:Use of uninitialized value in pattern match (m//)在模式匹配中使用未初始化的值 (m//)
【发布时间】:2016-08-10 00:39:47
【问题描述】:

即使我已经声明了我的正则表达式变量,我仍然收到此错误。

my $pattern = '(Cat\.\sNo\.\s\d+)';

稍后在我的代码中我使用$pattern

if ($page =~ /$pattern/)
{
  push(@array, $element);
}

但是当我运行我的代码时,它给了我以下错误,并继续成功运行:

Use of uninitialized value in pattern match (m//)

在 Google 上搜索此错误似乎指向变量尚未初始化的情况,尽管在我的情况下似乎我已经初始化了它?

【问题讨论】:

  • 你能告诉我们更多代码吗? $page$element 在哪里定义?我怀疑是变量范围问题。

标签: perl


【解决方案1】:

该消息并没有告诉您$pattern 未初始化;它告诉您$page 未初始化。如果您预计 $page 可能未初始化,那没关系,那么您可以绕过警告,并通过编写以下代码让源代码的未来读者清楚了解:

if (defined($page) && ($page =~ /$pattern/))

【讨论】:

  • 好的,我已经更新了原始问题中的代码。所以在这种情况下,$page$element 之前都已使用 my $pagemy $element 进行了初始化。但是我仍然收到未初始化的错误?
  • 再说明一下,我用默认的空白值初始化了 $page 和 $element,即 ""
  • my $page 不会初始化 $page,它只是声明它。 my $page; 等价于my $page = undef;,并且 等价于my $page = '';。在if 语句之前,如果您添加语句if(defined $page) { print "\$page is initialized\n"; } else { print "\$page is uninitialized\n"; },它会打印什么?
  • 感谢 ruakh,从中我可以确定它没有初始化 $page 的位置 - 因为有时 var 已初始化,但有时它显然没有初始化。谢谢!
【解决方案2】:

问题不是$pattern - 问题是$element

快速测试将产生相同的结果:

use strict;
use warnings;

my $pattern = '(Cat\.\sNo\.\s\d+)';
my $element =~ /$pattern/;

【讨论】:

    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-03-22
    • 1970-01-01
    • 2012-06-20
    • 2021-06-22
    • 1970-01-01
    相关资源
    最近更新 更多