使用块而不是Perl中的表达式来连接数组

时间:2011-05-21 03:17:26

标签: arrays perl string

我正试图以这种方式加入数组:

@cols = (1,2,3,4); 
my $s = join("|$_", @cols);
print $s;

我期待以下输出:

1|2|3|4    

但这不起作用。

我也在寻找一些类似reduce的函数,但我找不到一个,也不知道如何在Perl中编写一个。

使用CPAN不是一个选项,因为这个程序将在我无法安装的计算机中执行。

我可以将其他类似的功能用于此目的吗? 如何在Perl中编写泛化连接或缩减函数?

感谢。

2 个答案:

答案 0 :(得分:2)

我怀疑你想要:

my $s = join('|', @$hr{@cols} );

使用reduce:

use List::Util 'reduce';
my $s = reduce { "$a|$hr->{$b}" } '', @cols;

(虽然这会产生一个前导|)。

答案 1 :(得分:0)

List::Util(这不是CPAN的核心,尽管你不应该放弃CPAN)提供reduce功能。如果您提供输入/所需输出,也许我可以为您模拟一个示例。

看着ysth的答案让我再次猜测你想要的东西:

my $s = join("|", map { $hr->{$_} } @cols);

再次,更多的背景或许我们可以提供更多帮助。

编辑:根据OP的编辑,你真的只是在寻找简单的join功能。与map不同,它不需要任何$_,它会自动连接每个元素。

my $s = join("|", @cols);