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

15 行目の最後$i++で $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;
于 2013-03-19T23:43:43.880 に答える
1

18行目を次のように置き換える必要があるかもしれません:

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

配列には限界があります。:)

于 2013-03-19T23:43:43.300 に答える