我有:
#!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
在这里工作,但返回数组长度?
任何参考官方文档都会有所帮助。
执行时
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