我是perl的新手所以请耐心等待。
我有解析CSV文件的脚本。为了使事情更容易调试我正在使用状态机FSA :: Rules(非常喜欢它)。
现在每件事情都很顺利我需要让我的日志有意义,因为我需要记录行号,所以我的程序看起来像这样。
my $line = '';
my $lineCount = 0;
sub do {
...
#CSV opened
...
#State machine stuff happens here
readLine;
if ($line =~ m/.*Pattern*/){
#do stuff
}
}
sub readLine{
$line = <CSV>;
$lineCount ++;
}
但是我收到以下错误
Use of uninitialized value $line in pattern match (m//) at
任何人都知道为什么$ line不会被初始化? 感谢。
答案 0 :(得分:4)
当您到达文件末尾时,$line = <CSV>
会将未定义的值分配给$line
。通常的习惯用法是检查readline函数(由<>
运算符隐式调用)是否在继续之前返回了一个好的值...
while (my $line = <CSV>) {
# guaranteed that $line has a defined value
...
}
但你按照你的电话顺序,你正在避免检查。即使$lineCount
没有返回好的值,您当前的代码也会递增<CSV>
,这可能不是您想要的值。