打印Perl阵列的简便方法? (略带格式化)

时间:2011-04-21 07:48:33

标签: perl

是否有 easy 方法在每个元素之间打印出带逗号的Perl数组?

写一个for循环来做这件事很容易,但不是很优雅....如果这是有道理的。

11 个答案:

答案 0 :(得分:142)

只需使用join()

# assuming @array is your array:
print join(", ", @array);

答案 1 :(得分:29)

您可以使用Data::Dump

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

产地:

"(1, [2, 3], { 4 => 5 })"

答案 2 :(得分:18)

如果你正在为那些刚刚开始使用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中进行了描述。

享受!

答案 3 :(得分:10)

此外,您可能想尝试Data::Dumper。例如:

use Data::Dumper;

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

答案 4 :(得分:7)

检查/调试检查Data::Printer模块。它只是做一件事,一件事:

  

在屏幕上显示Perl变量和对象,格式正确(到   被人检查

使用示例:

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

上面的代码可能输出这样的东西(带颜色!):

   [
       [0] "a",
       [1] "b",
       [2] undef,
       [3] "c",
   ]

答案 5 :(得分:2)

你可以简单地print

@a = qw(abc def hij);

print "@a";

你会得到:

abc def hij

答案 6 :(得分:2)

# better than Dumper --you're ready for the WWW....

use JSON::XS;
print encode_json \@some_array

答案 7 :(得分:0)

使用UIButton *customButton = [UIButton buttonWithType:UIButtonTypeCustom]; [customButton setTitle:title forState:UIControlStateNormal]; [customButton setTitleColor:blueColor forState:UIControlStateNormal]; [customButton setTitleColor:whiteColor forState:UIControlStateHighlighted]; [customButton sizeToFit]; [customButton addTarget:target action:action forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:customButton];

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)]);

答案 8 :(得分:0)

这可能不是你想要的,但这是我为作业所做的事情:

$" = ", ";
print "@ArrayName\n";

答案 9 :(得分:-1)

也可以使用地图,但是当你有很多事情发生时,有时很难阅读。

map{ print "element $_\n" }   @array; 

答案 10 :(得分:-1)

但是,我并没有试过在下面跑。我认为这是一个棘手的方法。

map{print $_;} @array;