perl - Perl 在警告时在正则表达式编译中使用未初始化的值
问题描述
我在下面粘贴了一小段代码:
#!/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 行与您的正则表达式不匹配(它们不以 开头Start:
)。
由于您没有$start_data
使用值进行初始化,因此您会收到uninitialized
警告。
读取第 4 行后,您将停止收到警告,因为$start_data
分配了一个值 ( Data_abc
)。
推荐阅读
- python - 初始化一行二维数组初始化整个二维数组
- java - 调用类中的方法,继承
- amazon-web-services - 如何使用 HTTP 为 Common Crawl News Dataset 获取 WARC 文件列表?
- python - 为什么我得到未解决的对 unicode 和 xrange 的引用
- javascript - 使用相同的键动态合并对象数组并将其创建为新数据(对象数组)
- python - 锁定目录和两个类
- java - 使用 Jacop 在 Java 中使 IntVar[] 不相等的约束
- python - Sqlite 连接的 Python NameError
- java - Int 数组排序本身
- angular - 从点击的手风琴中获取名称