1

以下脚本用于学习 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
4

2 回答 2

3

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

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

对于它的价值,您可以使用 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;
于 2013-03-19T23:43:43.880 回答
1

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

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

数组有其局限性。:)

于 2013-03-19T23:43:43.300 回答