gpt4 book ai didi

Perl 在警告时正则表达式编译中使用未初始化的值

转载 作者:行者123 更新时间:2023-12-05 09:09:53 25 4
gpt4 key购买 nike

我在下面粘贴了一小段代码:

#!/usr/bin/perl

use strict;
use warnings;
use autodie;

my $start_data;
my $name = "Data_abc";

while(<DATA>){
my $line = $_;
if ($line =~ /^Start:\s+/){
my ($st, $data) = split(/\s+/,$line);
$start_data = $data;
}

for( $name ){
/^$start_data/ and do { next; }
}

print "END of execution\n";
}
print $start_data;

__DATA__
===============================
2020-05-20 Name
===============================
Start: Data_abc
Load: Load_data

脚本按预期工作,但抛出警告 -

Use of uninitialized value $start_data in regexp compilation at storage_problem.pl line 18,

既然我一开始就声明了$start_data,为什么会出现这个警告?

最佳答案

$start_data 已声明,但在您尝试在正则表达式中读取它之前没有为其分配值。因此,它是未定义的。

当我运行您的代码时,我收到 3 条警告消息,对应于您的 DATA 的前 3 行。这 3 行与您的正则表达式不匹配(它们不是以 Start: 开头)。

由于您没有使用值初始化 $start_data,您会收到 uninitialized 警告。

读取第 4 行后,您将不再收到警告,因为 $start_data 被分配了一个值 (Data_abc)。

关于Perl 在警告时正则表达式编译中使用未初始化的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61920170/

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