运行此Perl代码会给出错误:
尝试修改非可创建的数组值,下标-1 at update.pl第85行,第1行。
第85行是具有$line[$r] .= $_
的行。有人能指出我正确的方向吗?
my $loc = '../update/panden.txt';
my $r = -1;
my @line;
open (R, $loc) || die "$!";
while ( <R> ) {
$_ =~ s/NULL//g;
$r++ if ( $_ =~ /^"[0-9]{2,10}"\|"/ );
$line[$r] .= $_; # Line 85
my $ref = $_;
}
close R;
答案 0 :(得分:3)
猜猜 - 你的正则表达式不匹配,因此$r
仍然是-1
而你是一个空数组。
#!/usr/bin/env perl
use strict;
use warnings;
my @list;
$list[-1] = 1;
给你同样的错误。这意味着:
$_ =~ /^"[0-9]{2,10}"\|"/
与输入的第一行不匹配。
数组中负数索引的点是一种特殊情况 - 它意味着“从末尾开始计数” - 因此$array[-1]
是最后一个元素。但是当你有一个空数组时,这并没有多大意义。
如果你已经有一个已经填充过的数组,那么会工作,但我建议根据你的程序逻辑 - 它不应该,所以将它设置为-1
,并假设您将在以后递增它实际上是首先要求麻烦。