2013-03-19 3 views
1

Следующий сценарий предназначен для упражнений 4.6.4 при изучении Perl. «Обратный список» предлагается распечатать без использования reverse.Почему предупреждение о «неинициализированной ценности»?

В то время как выход был вопросом, который задает вопрос, я получил предупреждение между входом и выходом, в котором говорится «Use of unitialized value in print at line 18, <> line 4». Я думал, что я утверждал массив в line 10. Почему я все еще получаю предупреждения?

1  #!/usr/bin/perl 
2  #exercise4_6_4 
3  use warnings; 
4  use strict; 
5 
6  print "Type in your list: \n"; 
7  my $input =<>; 
8  chomp $input; 
9  my $i=0; 
10  my @array; 
11  while ($input ne "") { 
12  $array[$i] = $input; 
13  $input =<>; 
14  chomp $input; 
15  $i++; 
16  }; 
17  while ($i !=0) { 
18  print $array[$i],"\n"; 
19  $i--; 
20  }; 
21  print "$array[$i]"; 

Запуск сценария показывает следующее:

Type in your list: 
child 
books 
flight 

Use of uninitialized value in print at exercise4_6_4.pl line 18, <> line 4. 

flight 
books 
child 
+2

Кроме того, для дальнейшего использования ... это может быть хорошей идеей, чтобы получить возможность отправлять код без линии номера здесь на SO. :) – summea

+0

«Неинициализированное значение» не означает необъявленный идентификатор, это означает 'undef'. Он не жалуется на '@ array' - массивы никогда не могут быть« неинициализированы », а скорее' $ array [$ i] '. – ruakh

ответ

3

Поскольку ваш последний $i++ в строке 15 увеличивает $ i, концы цикла заканчиваются, тогда строка 18 пытается получить $array[$i], но вы ничего не сохранили в $ array [$ i].

Вы можете добавить $i-- if $i > 0 между строкой 16 и строкой 17, чтобы решить эту проблему.

Для чего это стоит, вы можете использовать толчок и поп-музыки, и не придется беспокоиться о инкремент счетчика

use strict; 
use warnings; 

print "Type in your list: \n"; 
my @input; 
push @input,$_ while defined($_ = <>) && $_ ne "\n"; 
print pop @input while @input; 
+0

Ах, право. Я забыл, что последний $ i является одним из плюсов числа элементов в массиве! Извините за ошибку новичка. Большое спасибо! –

1

Вы можете просто нужно заменить строку 18 с чем-то вроде этой линии:

print $array[$i-1], "\n";

Массивы имеют свои пределы. :)

Смежные вопросы