1

我想将mapPerl 中函数的输出连接到一个字符串变量。但是,如果我尝试这个:

$body .= map {"$_\n"} sort(@{$hash{$server}->{VALID}});

$body 的值等于 3 而不是预期的

用户1
用户2
用户3

如果我做:

打印地图 {"$_\n"} sort(@{$hash{$server}->{VALID}});

它给了我我想要的。

那么如何模仿打印地图功能并将其分配给 body 变量呢?

4

2 回答 2

5

map用于将一个列表转换为另一个列表,这就是它返回的内容。这适用,print因为该print函数采用一个列表并将输出它们以$,(输出字段分隔符)的值分隔。

如果你想将一个列表连接成一个字符串,你必须使用join.

$body .= join "\n", sort(@{$hash{$server}->{VALID}});
于 2013-01-04T17:36:26.370 回答
4

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}});
于 2013-01-04T17:36:11.227 回答