为什么会出现“未初始化值”的警告?

问题描述:

下面的脚本是在学习Perl的锻炼4.6.4。要求在不使用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

此外,以供将来参考...这可能是张贴代码,而行是个好主意号码在这里。 :) – summea 2013-03-19 23:44:08

+0

“未初始化的值”并不意味着一个未声明的标识符,这意味着'undef'。这不是在抱怨'@ array' - 阵列永远是“初始化” - 而是关于'$阵列[$ i]'。 – ruakh 2013-03-19 23:44:31

因为您的上一个$i++在第15行递增$ i,循环结束,则第18行尝试获得$array[$i],但是您没有在$ array [$ i]中存储任何内容。

你可以添加一个$i-- if $i > 0线16 17之间和线来解决这个问题。

对于它的价值,你可以使用push和pop,而不必担心增加计数器

use strict; 
use warnings; 

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

啊,对。我忘记了最后一个$我是数组中元素个数的一个加号!对不起,新手错误。非常感谢! – 2013-03-19 23:53:48

您可能只需要像这样的东西线,以取代18行:

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

阵列有其局限性。 :)