Perl全局变量未初始化

时间:2012-02-01 22:58:47

标签: perl

我是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不会被初始化? 感谢。

1 个答案:

答案 0 :(得分:4)

当您到达文件末尾时,$line = <CSV>会将未定义的值分配给$line。通常的习惯用法是检查readline函数(由<>运算符隐式调用)是否在继续之前返回了一个好的值...

 while (my $line = <CSV>) {
     # guaranteed that $line has a defined value
     ...
 }

但你按照你的电话顺序,你正在避免检查。即使$lineCount没有返回好的值,您当前的代码也会递增<CSV>,这可能不是您想要的值。