Простой способ, чтобы распечатать массив в Perl? (с небольшим форматированием)
есть легко способ распечатать массив Perl с запятыми между каждым элементом?
написание цикла for, чтобы сделать это довольно легко, но не совсем элегантно....если это имеет смысл.
11 ответов:
просто использовать
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
' чтобы избежать появления волновых эффектов по всему сценарию: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 и объектов на экране, правильно отформатированных (to быть осмотренным человеком)
пример использования:
use Data::Printer; p @array; # no need to pass references
код выше может вывести что-то вроде этого (с цветами!):
[ [0] "a", [1] "b", [2] undef, [3] "c", ]
используя
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";