Perl如何使用数组存储输入字符串

时间:2014-03-17 04:13:32

标签: arrays perl

用户首先输入多行。然后它从用户输入读取n行文本,并向后打印这些行,即,如果n = 5,则打印第5行  第一行,第四行,......和第一行最后一行。我在代码中没有想到错误,但是当我开始输入行(换行符为换行符)时,它就不会停止。我的数组可以存储无限数量的行,导致问题停止

use strict;
use warnings;

print "Enter number of n \n";
my $n = <STDIN>;
print "Enter couple lines of text \n";
my @array = (1..$n);
@array=<STDIN>;
do{
print "$array[$n]";
$n--;

}until($n=0);

2 个答案:

答案 0 :(得分:0)

结束循环条件为do { … } until ($n = 0);,相当于do { … } while (!($n = 0));

问题在于条件是赋值,零始终为假,因此循环是无限的。

使用do { … } until ($n == 0);

请注意,输入位于行@array = <STDIN>;中 - 它读取在EOF之前提供的所有输入。它不受任何方式$n的限制。

#!/usr/bin/env perl
use strict;
use warnings;

print "Enter number of n \n";
my $n = <STDIN>;
printf "Got %d\n", $n;

print "Enter couple lines of text \n";
my @array = (1..$n);
@array = <STDIN>;
do {
    print "$n = $array[$n]";
    $n--;
} until ($n == 0);

运行时,会给出:

$ perl inf.pl
Enter number of n 
3
Got 3
Enter couple lines of text 
abc
def
ghi
jkl
^D
3 = jkl
2 = ghi
1 = def
$

我认为你的期望是偏执的。

答案 1 :(得分:0)

以下是一些可能对您有所帮助的提示:

  • 始终在脚本顶部加入use strict;use warnings,以强制执行良好的编码实践,并帮助您更快地找到语法错​​误。
  • 您必须chomp来自<STDIN>的输入才能删除返回字符。
  • 使用数组函数push将元素添加到数组的末尾。其他相关的数组函数包括popshiftunshift和可能splice
  • 使用reverse返回颠倒顺序的数组。
  • 最后,for my $element (@array) {可以是一个有用的构造,用于迭代数组的元素。

这些提示会产生以下代码:

use strict;
use warnings;

print "Enter number of n \n";
chomp(my $n = <STDIN>);

die "n must be an integer" if $n =~ /^\d+$/;

my @array;
print "Enter $n lines of text\n";
for (1..$n) {
    my $input = <STDIN>;
    # chomp $input; # Do you want line endings, or not?
    push @array, $input;
}

print "Here is your array: @array";