我正在尝试将Perl中的数组从Z排序为A,然后在一行中返回排序后的数组。
我正在做的是:
sub mainTexts {
my @texts = ();
print ("Enter text 1: ");
my $text1 = <STDIN>;
push @texts, $text1;
print ("Enter text 2: ");
my $text2 = <STDIN>;
push @texts, $text2;
print ("Enter text 3: ");
my $text3 = <STDIN>;
push @texts, $text3;
my @sorted_texts = sort { lc($b) cmp lc($a) } @texts;
print "Your texts are: ", @sorted_texts;
}
mainTexts();
结果是:
您的文本是:ZSAHS
FGDSJ
ABCNA
我想要的结果是:
您的文本是:ZSAHS FGDSJ ABCNA
有什么线索可以通过上面的代码实现吗?谢谢。
答案 0 :(得分:4)
来自readline运算符(<>
)的输入通常将在行末包含换行符,因此您需要将其传递给chomp。然后,您可以将数组直接插值到字符串中,而不必将其作为要打印的其他参数传递。对数组进行插值会将每个参数用$"分隔,该参数默认为空格,而要打印的单独参数由$,分隔,该参数没有默认值,但通常设置为换行符。
my @texts;
print ("Enter text 1: ");
chomp(my $text1 = <STDIN>);
push @texts, $text1;
print ("Enter text 2: ");
chomp(my $text2 = <STDIN>);
push @texts, $text2;
print ("Enter text 3: ");
chomp(my $text3 = <STDIN>);
push @texts, $text3;
my @sorted_texts = sort { lc($b) cmp lc($a) } @texts;
print "Your texts are: @sorted_texts\n";
由于chomp也可以对列表进行操作,因此您只需在读取所有输入后添加一个chomp通话即可。
chomp(@texts);
答案 1 :(得分:-1)
主要的答案不是您的$ a和$ b取反了吗? 操作线应为:
my @sorted_texts = sort { lc($a) cmp lc($b) } @texts;