Arrays 在Perl中,在将每个元素括在括号中之后,如何连接数组的元素?

Arrays 在Perl中,在将每个元素括在括号中之后,如何连接数组的元素?,arrays,perl,join,Arrays,Perl,Join,我试图连接Perl数组的元素 @array=('a','b','c','d','e'); $string=join(']',@array); 会给我 $string="a]b]c]d]e"; 有什么我能很快得到的吗 $string="[a][b][c][d][e]"; ?也许: { local $" = "]["; my @array = qw/a b c d e/; print "[@array]"; } 尽管您可能应该: print "[" . join("][", @a

我试图连接Perl数组的元素

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

$string="a]b]c]d]e";
有什么我能很快得到的吗

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

也许:

{
  local $" = "][";
  my @array = qw/a b c d e/;
  print "[@array]";
}
尽管您可能应该:

print "[" . join("][", @array) . "]";
快乐编码:-)

你也可以概括一下:

#!/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 };
}
这里有两个选项:

#!/usr/bin/perl

use strict;
use warnings;

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

另一种方法是使用


小修正:正确的语法应该是:
print“[”.join(“][”,@array)。“]”@steinar谢谢你的更正--在语言之间切换会让我的大脑混乱。+1。我将恭敬地不同意西南努尔的观点。这是迄今为止发布的最好的书面解决方案,即映射数组“”上的联接。这显然不同于以前使用qq的解决方案。我喜欢join/map解决方案。@SinanÜnür:考虑到你在这个网站上的声誉,显然你做得对。然而,您真的认为这是一个很好的解决方案,可以为一个显然是新Perl程序员的人提供这个解决方案吗?您的解决方案使用了一个本地预定义变量(甚至没有限定范围!)、qq和非标准分隔符、嵌入列表、匿名数组和映射。现在您有了字符串自动递增、数组引用、匿名子(以及闭包)、=>而不是逗号和sprintf。我想你现在这样做只是为了自娱自乐!(顺便说一句,这没什么害处,只是对OP没有帮助。)@A.Rex:放松。玩得开心点。这个问题已经得到了充分的回答。我很高兴我最终正确地理解了你!你的第一个解决方案对我来说不够明显,对不起;第二个肯定有帮助。小心。@A.Rex,@Sinan-这是在向某人展示Perl在演示TMTOWTDI时并不无聊:)+1有趣,请解释为什么会有@array,@arrayFirst array-由于是
“x”
运算符的第二个操作数-在标量上下文中求值,因此是数组中的元素。第一个表达式变成:“[%s]”重复N次(字符串“x”运算符的含义)。第二个@array只是传递给sprintfWhat的参数列表,没有CPAN答案?来吧,大家……我们可以做得更好!:)@DVK:你可以把Sinan的答案想象成这样一个模块的源代码;)
#!/usr/bin/perl

use strict;
use warnings;

my @array = 'a' .. 'e';
my $string = join('', map { "[$_]" } @array);
my $string1 = '[' . join('][', @array) . ']';
my $str = sprintf '[%s]' x @array, @array;