2010-10-28 26 views
4

我试图加入Perl数组的元素。在Perl中,如何在括号中包含每个元素后连接数组的元素?

@array=('a','b','c','d','e'); 
$string=join(']',@array); 

会给我

$string="a]b]c]d]e"; 

反正我有可以迅速得到

$string="[a][b][c][d][e]"; 

+2

什么,没有CPAN的答案?来吧人们......我们可以做得比这更好! :) – DVK 2010-10-29 02:26:53

+0

@DVK:您可以将思南的答案想象为一个这样的模块的源代码;) – Zaid 2010-10-29 06:58:20

回答

20

另一种方式来做到这一点,利用sprintf

my $str = sprintf '[%s]' x @array, @array; 
+0

有趣的,请解释为什么有@array,@array – 2010-10-29 01:47:33

+7

第一个数组 - 由于是“x”操作符的第二个操作数 - 在标量上下文中计算,因此是数组中的元素数。第一个表达式变为:“[%s]”重复N次(字符串“x”运算符的含义。第二个@array只是传递给sprintf的参数列表。 – DVK 2010-10-29 02:14:34

+1

真棒技巧。发现有用很多次! – Jean 2015-07-24 14:58:09

2

也许:

{ 
    local $" = "]["; 
    my @array = qw/a b c d e/; 
    print "[@array]"; 
} 

虽然你或许应该只是:

print "[" . join("][", @array) . "]"; 

快乐编码:-)

+0

小修正:正确的语法是:'print“[”。加入(“] [”,@array)。 “]”;' – steinar 2010-10-28 23:30:11

+0

@steinar感谢您的纠正 - 在我的大脑中混杂的语言之间切换。 – 2010-10-29 00:30:40

3
#!/usr/bin/perl 
use strict; use warnings; 

local $" = ''; 
my $x = qq|@{[ map "[$_]", qw(a b c d e) ]}|; 

您也可以概括一点:

#!/usr/bin/perl 
use strict; use warnings; 

my @array = 'a' .. 'e'; 

print decorate_join(make_decorator('[', ']'), \@array), "\n"; 

sub decorate_join { 
    my ($decorator, $array) = @_; 
    return join '' => map $decorator->($_), @$array; 
} 

sub make_decorator { 
    my ($left, $right) = @_; 
    return sub { sprintf "%s%s%s", $left, $_[0], $right }; 
} 
+2

@SinanÜnür:显然你做的事情是正确的,因为你在这个网站上的声誉。然而,你真的认为这是一个很好的解决方案,可以给那些显然是一个新的Perl程序员的人吗?您的解决方案使用本地预定义变量(甚至没有作用域!),qq使用非标准分隔符,嵌入式列表,匿名数组和地图。 – 2010-10-29 00:32:00

+0

那么,现在你有字符串自动增量,数组引用,匿名子(并因此关闭),=>而不是逗号和sprintf。在这一点上,我假设你只是为了自己的喜好而做这件事! (PS,这没有什么坏处,它对OP没有帮助。) – 2010-10-29 00:38:46

+2

@ A.Rex:放松。玩得开心点。这个问题已经得到充分的回答。 – 2010-10-29 00:39:28

13

这里有两种选择:

#!/usr/bin/perl 

use strict; 
use warnings; 

my @array = 'a' .. 'e'; 
my $string = join('', map { "[$_]" } @array); 
my $string1 = '[' . join('][', @array) . ']'; 
+0

+1。我会恭敬地不同意SinanÜnür。这是迄今为止发布的最好的解决方案,即映射阵列的“”连接。这与使用qq | @ {[..]} |的先前解决方案明显不同。 – 2010-10-29 00:20:14

+1

我喜欢加入/地图解决方案。 – tchrist 2010-10-29 02:21:55

+0

+1因为地图! – Sosi 2014-10-31 15:55:07

相关问题