Простой способ распечатать массив Perl?(с небольшим форматированием) - PullRequest
92 голосов
/ 21 апреля 2011

Есть ли простой способ распечатать массив Perl с запятыми между каждым элементом?

Написать цикл for довольно просто, но не совсем элегантно .... если это имеет смысл.

Ответы [ 11 ]

142 голосов
/ 21 апреля 2011

Просто используйте join():

# assuming @array is your array:
print join(", ", @array);
29 голосов
/ 21 апреля 2011

Вы можете использовать Data::Dump:

use Data::Dump qw(dump);
my @a = (1, [2, 3], {4 => 5});
dump(@a);

Производит:

"(1, [2, 3], { 4 => 5 })"
18 голосов
/ 21 апреля 2011

Если вы кодируете вид ясности, который будет понят тем, кто только начинает работать с Perl, традиционная конструкция this с высокой степенью ясности и разборчивости говорит, что это означает:

$string = join ', ', @array;
print "$string\n";

Эта конструкция задокументирована в perldoc -fjoin.

Однако мне всегда нравилось, как просто $, делает это.Специальная переменная $" предназначена для интерполяции, а специальная переменная $, - для списков.Объедините любой из них с динамическим ограничением области действия 'local', чтобы избежать появления волновых эффектов в сценарии:

use 5.012_002;
use strict;
use warnings;

my @array = qw/ 1 2 3 4 5 /;

{
    local $" = ', ';
    print "@array\n"; # Interpolation.
}

ИЛИ с $,:

use feature q(say);
use strict;
use warnings;

my @array = qw/ 1 2 3 4 5 /;
{
    local $, = ', ';
    say @array; # List
}

Специальные переменные $, и $" задокументированы в perlvar .Ключевое слово local и способы его использования для ограничения последствий изменения значения глобальной переменной пунктуации, вероятно, лучше всего описано в perlsub .

Наслаждайтесь!

10 голосов
/ 21 апреля 2011

Также вы можете попробовать Data :: Dumper . Пример:

use Data::Dumper;

# simple procedural interface
print Dumper($foo, $bar);
7 голосов
/ 18 июня 2013

Для проверки / отладки проверьте модуль Data::Printer. Он предназначен для выполнения одной и только одной вещи:

отображение переменных и объектов Perl на экране, правильно отформатированных (для быть проверенным человеком)

Пример использования:

use Data::Printer;  
p @array;  # no need to pass references

Приведенный выше код может выводить что-то вроде этого (с цветами!):

   [
       [0] "a",
       [1] "b",
       [2] undef,
       [3] "c",
   ]
3 голосов
/ 21 апреля 2011

Вы можете просто print это.

@a = qw(abc def hij);

print "@a";

Вы получите:

abc def hij
2 голосов
/ 21 апреля 2011
# better than Dumper --you're ready for the WWW....

use JSON::XS;
print encode_json \@some_array
0 голосов
/ 28 октября 2017

Я не пытался бежать ниже, хотя.Я думаю, что это хитрый способ.

map{print $_;} @array;
0 голосов
/ 22 июня 2017

Карта также может быть использована, но иногда трудно читать, когда у вас много чего происходит.

map{ print "element $_\n" }   @array; 
0 голосов
/ 22 июля 2016

Возможно, это не то, что вы ищете, но вот что я сделал для задания:

$" = ", ";
print "@ArrayName\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...