Perl中使用逗号或点对字符串进行排序的数组/列表,

问题描述 投票:6回答:1

我有:

#!c:\Dwimperl\perl\bin\perl.exe

use strict;
use warnings;

# Define an array
my @letters = ('b', 'c', 'a', 'e', 'd');
print sort @letters , "\n";

输出:abcdePress any key to continue . . .为什么没有任何行返回?

然后我尝试使用句点串联运算符:

#!c:\Dwimperl\perl\bin\perl.exe

use strict;
use warnings;

# Define an array
my @letters = ('b', 'c', 'a', 'e', 'd');
print sort @letters . "\n";

输出:5 Press any key to continue . . .

为什么\n在这里工作,但返回数组长度?

任何参考官方文档都会有所帮助。

arrays perl list hash
1个回答
9
投票

执行时

print sort @letters . "\n";

您实际上是在标量上下文中评估@letters并追加换行符,然后对该数组进行排序。由于数组的长度为5,因此得到数字5。

尝试这样:

my @letters = ('b', 'c', 'a', 'e', 'd');
print sort(@letters . "\ntest");

您将输出:

5
test

sort的行为在标量上下文中未定义。因此,您无法做:

my @letters = ('b', 'c', 'a', 'e', 'd');
print sort(@letters) . "\n";
# This doesn't produce any output

您可能想做这样的事情:

my @letters = ('b', 'c', 'a', 'e', 'd');
print join(",", sort(@letters)) . "\n";

输出:

a,b,c,d,e

对于第一种情况,您将\n附加到字母列表,然后对其进行排序。因此,它在开始时就结束了。这是一个例子:

my @letters = ('b', 'c', 'a', 'e', 'd');
print sort @letters , "\n", 1, 2, 3;

输出:

# It outputs a newline and then the characters:

123abcde

通常,使用括号清除想要获得的行为很有用。

my @letters = ('b', 'c', 'a', 'e', 'd');
print sort(@letters), "\ntest";

输出:

abcde
test
© www.soinside.com 2019 - 2024. All rights reserved.