0

I'm trying to take user arguments into an array and print them into a while loop, can anyone help?

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";

}

this is my updated code, I'm trying now to figure out how to sort it increasingly and decreasing based off of these arguments "Ask ask as How 100 "abc def" oK ok" please help!

4

3 回答 3

1

while只要条件表达式为真,就重复循环。

如果用户提供了一些参数,则为@user_args真,因此将进入循环。由于循环没有改变@user_args,循环将无限重复。

如果您想使用while,则必须将您的条件更改为非恒定的。例如,您可以更改@user_args循环体。如果您要删除@user_args循环的每次传递的第一个元素怎么办...

于 2013-04-08T18:25:22.313 回答
0

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

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

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

于 2013-04-08T18:40:57.753 回答
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,即第二个元素“two”的索引。

于 2013-04-08T18:41:36.947 回答