gpt4 book ai didi

regex - Perl 警告 : Use of uninitialized value in concatenation (. ) 或字符串

转载 作者:行者123 更新时间:2023-12-03 23:32:21 24 4
gpt4 key购买 nike

我无法弄清楚为什么正则表达式模式不匹配。此外,输出提示 $found未初始化,但我相信我这样做了。到目前为止,这是我的代码:

use strict;
use warnings;

my @strange_list = ('hungry_elephant', 'dancing_dinosaur');

my $regex_patterns = qr/
elephant$
^dancing
/x;

foreach my $item (@strange_list) {
my ($found) = $item =~ m/($regex_patterns)/i;
print "Found: $found\n";
}

这是我得到的输出:

Use of uninitialized value $found in concatenation (.) or string at C:\scripts\perl\sandbox\regex.pl line 13.
Found:
Use of uninitialized value $found in concatenation (.) or string at C:\scripts\perl\sandbox\regex.pl line 13.
Found:

我是否需要初始化 $found以另一种方式?另外,我是否正确创建了一个多行字符串来解释为正则表达式?

非常感谢。

最佳答案

如果模式匹配( =~ )不匹配任何内容,则您的标量 $found 中不会存储任何内容所以 Perl 提示你试图插入一个没有给定值的变量。

除非有条件,否则您可以使用后缀轻松解决此问题:

$found = "Nothing" unless $found
print "Found: $found\n";

上面的代码将值“Nothing”赋给 $found仅当它还没有值时。现在,无论哪种情况,您的打印语句都将始终正常工作。

您也可以只使用一个简单的 if 语句,但这似乎更冗长:
if( $found ) {
print "Found: $found\n";
}
else {
print "Not found\n";
}

另一个可能最干净的选项是将您的模式匹配放在 if 语句中:
if( my ($found) = $item =~ m/($regex_patterns)/i ) {
# if here, you know for sure that there was a match
print "Found: $found\n";
}

关于regex - Perl 警告 : Use of uninitialized value in concatenation (. ) 或字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17528494/

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