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这里的工作会返回数组长度?
任何对官方文档的引用都会有帮助.
当你这样做
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)