我有:
#!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
在这里工作但返回数组长度?
任何对官方文档的引用都会有所帮助。
答案 0 :(得分: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 produces no 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