修改非可创建的数组值

时间:2018-05-14 10:47:37

标签: perl

运行此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;

1 个答案:

答案 0 :(得分:3)

猜猜 - 你的正则表达式不匹配,因此$r仍然是-1而你是一个空数组。

#!/usr/bin/env perl

use strict;
use warnings;

my @list;

$list[-1] = 1;

给你同样的错误。这意味着:

$_ =~ /^"[0-9]{2,10}"\|"/

与输入的第一行不匹配。

数组中负数索引的点是一种特殊情况 - 它意味着“从末尾开始计数” - 因此$array[-1]是最后一个元素。但是当你有一个空数组时,这并没有多大意义。

如果你已经有一个已经填充过的数组,那么工作,但我建议根据你的程序逻辑 - 它不应该,所以将它设置为-1,并假设您将在以后递增它实际上是首先要求麻烦。