我想将map
Perl 中函数的输出连接到一个字符串变量。但是,如果我尝试这个:
$body .= map {"$_\n"} sort(@{$hash{$server}->{VALID}});
$body 的值等于 3 而不是预期的
用户1 用户2 用户3
如果我做:
打印地图 {"$_\n"} sort(@{$hash{$server}->{VALID}});
它给了我我想要的。
那么如何模仿打印地图功能并将其分配给 body 变量呢?
map
用于将一个列表转换为另一个列表,这就是它返回的内容。这适用,print
因为该print
函数采用一个列表并将输出它们以$,
(输出字段分隔符)的值分隔。
如果你想将一个列表连接成一个字符串,你必须使用join
.
$body .= join "\n", sort(@{$hash{$server}->{VALID}});
print
连接由 返回的数组map
,将具有 的值的项交错$,
。所以,你需要这个来模拟print
行为:
$body .= join $,, map {"$_\n"} sort(@{$hash{$server}->{VALID}});
只要print
您担心,另一种有效的可能性是:
print "$_\n" for sort(@{$hash{$server}->{VALID}});
或者,启用 Perl v5.10 功能say
,只需:
say for sort(@{$hash{$server}->{VALID}});
推断连接:
$body .= "$_\n" for sort(@{$hash{$server}->{VALID}});