简单的方法来打印Perl数组? (有一点格式)

有一个简单的方法来打印每个元素之间用逗号的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"; 

这个构造被logging在perldoc -f join

不过,我一直都很喜欢简单的$,做到这一点。 特殊variables$"用于插值,特殊variables$,用于列表。将任意一个与dynamic作用域约束' 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 } 

特殊variables$,$"logging在perlvar中 , local关键字以及如何用来限制改变全局标点符号variables值的效果可能在perlsub中有最好的描述。

请享用!

另外,你可能想尝试Data :: Dumper 。 例:

 use Data::Dumper; # simple procedural interface print Dumper($foo, $bar); 

检查/debugging时,请检查Data::Printer模块。 这意味着只做一件事,一件事:

在屏幕上显示Perlvariables和对象,格式正确(由人类检查)

用法示例:

 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; 

尽pipe如此,我还没有尝试在下面跑步。 我认为这是一个棘手的方法。

 map{print $_;} @array;