在while循环中打印用户参数

时间:2013-04-08 18:15:05

标签: perl while-loop arguments

我试图将用户参数放入数组并将其打印到while循环中,任何人都可以帮忙吗?

my @user_args = sort (@ARGV);
chomp(@user_args);
my $i = -1;
while (++$i <= $#ARGV)
{

    print "$ARGV[$i] \n";

}



print "\nStep #2\n";
my @user_args2 = sort {$b cmp $a} @ARGV;
while (++$i <= $#ARGV)
{

    print "@user_args2[$i] \n";

}

这是我更新的代码,我现在正在尝试弄清楚如何根据这些参数逐渐对其进行排序和减少&#34;问问如何100&#34; abc def&#34;好的&#34;请帮忙!

3 个答案:

答案 0 :(得分:1)

只要条件表达式为真,

while就会重复循环。

如果用户提供了一些参数,@user_args将为真,那么将输入循环。由于循环不会改变@user_args,循环将无限重复。

如果你想使用while,你必须将你的状况改为不稳定的状态。例如,您可以在循环体中更改@user_args。如果您要删除循环的每个传递的@user_args的第一个元素,该怎么办...

答案 1 :(得分:0)

就像@ikegami所说,你的循环是一个无限循环。如果用户传入参数“abc”和“123”,则@user_args的内容将在while循环的每次迭代中('abc', 123)

有很多方法可以实现这一点,但有一种方法是使用shift@user_args数组中取出第一项。在while循环中执行此操作,这样,一旦从数组中移出最后一个元素,while循环将不再为true,而while循环将退出。

有关如何将元素移出数组的更多信息,请参阅shift documentation

答案 2 :(得分:0)

如果你想在while循环中执行它,那么使用另一个变量$ i,以保持索引被打印出来,如下所示:

#!usr/bin/perl -w
use strict;

my $i = -1;
while ( ++$i <= $#ARGV ) 
{

    print "$ARGV[$i]\n";

}

$#ARGV给出数组$#ARGV的最后一个元素的索引,例如如果@ARGV是这样的:

@ARGV = ("one","two");

然后$#ARGV将给出1,这是第二个元素的索引,“2”。