Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 为什么会出现“未初始化值”的警告?_Perl - Fatal编程技术网

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

Perl 为什么会出现“未初始化值”的警告?,perl,Perl,以下脚本用于学习Perl的练习4.6.4。要求打印反向列表,而不使用反向 虽然输出是问题要求的,但我在输入和输出之间得到了一个警告,即在第18行第4行的打印中使用单位化值。 我想我已经在第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 $

以下脚本用于学习Perl的练习4.6.4。要求打印反向列表,而不使用反向

虽然输出是问题要求的,但我在输入和输出之间得到了一个警告,即在第18行第4行的打印中使用单位化值。 我想我已经在第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

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

打印$array[$i-1],\n


数组有其局限性:

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

打印$array[$i-1],\n

数组有其局限性:

因为第15行上的最后一个$i++增加了$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;
因为第15行上的最后一个$i++增加$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;

另外,为了将来的参考。。。在此处发布代码时不使用行号可能是个好主意,因此:未初始化的值并不表示未声明的标识符,它表示未定义。它并不是在抱怨@array-数组永远不能被取消初始化-而是在抱怨$array[$i]。另外,为了将来的参考。。。在此处发布代码时不使用行号可能是个好主意,因此:未初始化的值并不表示未声明的标识符,它表示未定义。它不是在抱怨@array-array永远不能被取消初始化-而是在抱怨$array[$i]。啊,没错。我忘了最后一个$I是数组中元素数的1加号!对不起,新手的错误。谢谢!啊,对。我忘了最后一个$I是数组中元素数的1加号!对不起,新手的错误。谢谢!