perl sort array/list使用逗号或点进行字符串连接

Rob*_*cha 6 arrays perl hash list

我有:

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

use strict;
use warnings;

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

输出: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";
Run Code Online (Sandbox Code Playgroud)

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

为什么\n这里的工作会返回数组长度?

任何对官方文档的引用都会有帮助.

hma*_*tt1 9

当你这样做

print sort @letters . "\n";
Run Code Online (Sandbox Code Playgroud)

你真正在做的是@letters在标量上下文中进行评估并附加换行符,然后对该数组进行排序.由于数组长度为5,因此数字为5.

试试这样:

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

你会输出:

5
test
Run Code Online (Sandbox Code Playgroud)

sort标量上下文中的行为未定义.所以,你不能这样做:

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

你可能想做的是这样的:

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

输出:

a,b,c,d,e
Run Code Online (Sandbox Code Playgroud)

对于第一个场景,您将附加\n到字母列表,然后对其进行排序.所以最终会在一开始就结束.这是一个例子

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

输出:

# It outputs a newline and then the characters:

123abcde
Run Code Online (Sandbox Code Playgroud)

通常,使用括号来清除您想要获得的行为是很有用的.

my @letters = ('b', 'c', 'a', 'e', 'd');
print sort(@letters), "\ntest";
Run Code Online (Sandbox Code Playgroud)

输出:

abcde
test
Run Code Online (Sandbox Code Playgroud)