Есть ли способ easy распечатать массив Perl с запятыми между каждым элементом?
Написание цикла for для этого довольно легко, но не очень элегантно.... если это имеет смысл.
Есть ли способ easy распечатать массив Perl с запятыми между каждым элементом?
Написание цикла for для этого довольно легко, но не очень элегантно.... если это имеет смысл.
Просто используйте join()
:
# assuming @array is your array:
print join(", ", @array);
Вы можете использовать Data::Dump
:
use Data::Dump qw(dump);
my @a = (1, [2, 3], {4 => 5});
dump(@a);
Выдает:
"(1, [2, 3], { 4 => 5 })"
Если вы кодируете ясность, понятную кому-то, кто только начинает с Perl, традиционная эта конструкция говорит о том, что это означает, с высокой степенью ясности и удобочитаемости:
$string = join ', ', @array;
print "$string\n";
Эта конструкция задокументирована в perldoc -f
join
.
Однако мне всегда нравилось, как это делает простой $,
. Специальная переменная $"
предназначена для интерполяции, а специальная переменная $,
предназначена для списков. Объедините один из них с динамическим ограничением по объему "local
", чтобы избежать эффекта пульсации во всем script:
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.
Наслаждайтесь!
Кроме того, вы можете попробовать Data:: Dumper. Пример:
use Data::Dumper;
# simple procedural interface
print Dumper($foo, $bar);
Для проверки/отладки проверьте модуль Data::Printer
. Он предназначен только для одной вещи и только одной вещи:
отображать Perl-переменные и объекты на экране, правильно отформатированные (до проверяться человеком)
Пример использования:
use Data::Printer;
p @array; # no need to pass references
В приведенном выше коде может выводиться что-то вроде этого (с цветами!):
[
[0] "a",
[1] "b",
[2] undef,
[3] "c",
]
Вы можете просто print
его.
@a = qw(abc def hij);
print "@a";
Вы получите:
abc def hij
# better than Dumper --you're ready for the WWW....
use JSON::XS;
print encode_json \@some_array
Использование Data::Dumper
:
use strict;
use Data::Dumper;
my $GRANTstr = 'SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, EXECUTE, TRIGGER';
$GRANTstr =~ s/, /,/g;
my @GRANTs = split /,/ , $GRANTstr;
print Dumper(@GRANTs) . "===\n\n";
print Dumper(\@GRANTs) . "===\n\n";
print Data::Dumper->Dump([\@GRANTs], [qw(GRANTs)]);
Создает три разных стиля вывода:
$VAR1 = 'SELECT';
$VAR2 = 'INSERT';
$VAR3 = 'UPDATE';
$VAR4 = 'DELETE';
$VAR5 = 'LOCK TABLES';
$VAR6 = 'EXECUTE';
$VAR7 = 'TRIGGER';
===
$VAR1 = [
'SELECT',
'INSERT',
'UPDATE',
'DELETE',
'LOCK TABLES',
'EXECUTE',
'TRIGGER'
];
===
$GRANTs = [
'SELECT',
'INSERT',
'UPDATE',
'DELETE',
'LOCK TABLES',
'EXECUTE',
'TRIGGER'
];
Возможно, это не то, что вы ищете, но вот что я сделал для назначения:
$" = ", ";
print "@ArrayName\n";
Карта также может использоваться, но иногда ее трудно читать, когда у вас много вещей.
map{ print "element $_\n" } @array;
Однако я не пробовал работать ниже. Я считаю это сложным способом.
map{print $_;} @array;