我试图加入Perl数组的元素。在Perl中,如何在括号中包含每个元素后连接数组的元素?
@array=('a','b','c','d','e');
$string=join(']',@array);
会给我
$string="a]b]c]d]e";
反正我有可以迅速得到
$string="[a][b][c][d][e]";
?
我试图加入Perl数组的元素。在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) . "]";
快乐编码:-)
小修正:正确的语法是:'print“[”。加入(“] [”,@array)。 “]”;' – steinar 2010-10-28 23:30:11
@steinar感谢您的纠正 - 在我的大脑中混杂的语言之间切换。 – 2010-10-29 00:30:40
#!/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 };
}
@SinanÜnür:显然你做的事情是正确的,因为你在这个网站上的声誉。然而,你真的认为这是一个很好的解决方案,可以给那些显然是一个新的Perl程序员的人吗?您的解决方案使用本地预定义变量(甚至没有作用域!),qq使用非标准分隔符,嵌入式列表,匿名数组和地图。 – 2010-10-29 00:32:00
那么,现在你有字符串自动增量,数组引用,匿名子(并因此关闭),=>而不是逗号和sprintf。在这一点上,我假设你只是为了自己的喜好而做这件事! (PS,这没有什么坏处,它对OP没有帮助。) – 2010-10-29 00:38:46
@ A.Rex:放松。玩得开心点。这个问题已经得到充分的回答。 – 2010-10-29 00:39:28
这里有两种选择:
#!/usr/bin/perl
use strict;
use warnings;
my @array = 'a' .. 'e';
my $string = join('', map { "[$_]" } @array);
my $string1 = '[' . join('][', @array) . ']';
什么,没有CPAN的答案?来吧人们......我们可以做得比这更好! :) – DVK 2010-10-29 02:26:53
@DVK:您可以将思南的答案想象为一个这样的模块的源代码;) – Zaid 2010-10-29 06:58:20