В Perl, как я могу объединить элементы массива после заключения каждого элемента в скобки? - PullRequest
5 голосов
/ 29 октября 2010

Я пытался объединить элементы массива Perl.

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

даст мне

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

Есть ли в любом случае, я могу быстро получить

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

Ответы [ 4 ]

25 голосов
/ 29 октября 2010

Еще один способ сделать это, используя sprintf.

my $str = sprintf '[%s]' x @array, @array;
13 голосов
/ 29 октября 2010

Вот два варианта:

#!/usr/bin/perl

use strict;
use warnings;

my @array = 'a' .. 'e';
my $string = join('', map { "[$_]" } @array);
my $string1 = '[' . join('][', @array) . ']';
4 голосов
/ 29 октября 2010

Возможно:

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

Хотя вам, вероятно, следует просто:

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

Счастливое кодирование: -)

3 голосов
/ 29 октября 2010
#!/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 };
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...