为什么要警告“未初始化的价值”?

时间:2013-03-19 23:38:57

标签: perl

以下脚本适用于练习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 个答案:

答案 0 :(得分:3)

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

您可以在第16行和第17行之间添加$i-- if $i > 0来解决问题。

对于它的价值,您可以使用推送和弹出,而不必担心增加计数器

use strict;
use warnings;

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

答案 1 :(得分:1)

您可能只需要将此行替换为第18行:

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

阵列有其局限性。 :)