我试图将用户参数放入数组并将其打印到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;请帮忙!
答案 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”。