以下脚本适用于练习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
答案 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";
阵列有其局限性。 :)