Модификация не создаваемого значения массива - PullRequest
0 голосов
/ 14 мая 2018

Запуск этого Perl-кода дает мне ошибку:

Попытка изменения значения не создаваемого массива, индекс -1 при 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 голосов
/ 14 мая 2018

По предположению - ваше регулярное выражение не соответствует, поэтому $r по-прежнему -1 и у вас пустой массив.

#!/usr/bin/env perl

use strict;
use warnings;

my @list;

$list[-1] = 1;

Дает вам ту же ошибку. Это означает, что:

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

Не соответствует первой строке вашего ввода.

Точка отрицательных индексов в массиве является особым случаем - это означает «считать с конца», поэтому $array[-1] - последний элемент. Но это не имеет смысла, когда у вас есть пустой массив.

Это будет работать , если у вас есть массив, который уже заполнен, но я бы посоветовал, основываясь на логике вашей программы - он не должен , и поэтому установите его до -1 с допущением, что вы будете увеличивать его позже, на самом деле изначально вызывает проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...