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

fun*_*hun 94 perl

有没有一种简单的方法可以在每个元素之间打印出带逗号的Perl数组?

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

Ale*_*lex 144

只需使用join():

# assuming @array is your array:
print join(", ", @array);
Run Code Online (Sandbox Code Playgroud)

  • 或者,如果你想变得非常脏:`{local $,=','; print @array}`. (9认同)
  • 有不止一种方法可以做到这一点..但是这种方式不会让你在讨厌你之后维护代码.是的,perldoc perlvar存在,但我更愿意浏览"join","@ array",而不是每隔一行点击perlvar来弄清楚所有深奥变量在做什么. (9认同)
  • 这非常适合打印目录内容.`print"当前目录包含".join(',',<*>)."\n" 个;` (3认同)

Eug*_*ash 29

你可以使用Data::Dump:

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

生产:

"(1, [2, 3], { 4 => 5 })"
Run Code Online (Sandbox Code Playgroud)

  • 在Ubuntu/Mint上,安装libdata-dump-perl软件包. (2认同)
  • 这里最好的答案!也适用于多维数组.最灵活的. (2认同)

Dav*_*idO 18

如果你正在为那些刚开始使用Perl的人所理解的那种清晰度进行编码,那么传统的这种结构会说明它的含义,具有高度的清晰度和易读性:

$string = join ', ', @array;
print "$string\n";
Run Code Online (Sandbox Code Playgroud)

这个结构记录在perldoc -fjoin.

但是,我一直都很喜欢这么简单$,.特殊变量 $"用于插值,特殊变量$,用于列表.将其中任何一个与动态范围约束' local' 结合使用,以避免在整个脚本中产生连锁反应:

use 5.012_002;
use strict;
use warnings;

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

{
    local $" = ', ';
    print "@array\n"; # Interpolation.
}
Run Code Online (Sandbox Code Playgroud)

或者与$,:

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

my @array = qw/ 1 2 3 4 5 /;
{
    local $, = ', ';
    say @array; # List
}
Run Code Online (Sandbox Code Playgroud)

特殊变量$,$"记录在perlvar中.该local关键字,以及它如何被用来限制改变全球标点符号变量的值的影响可能是最好的描述perlsub.

请享用!


And*_*eas 10

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

use Data::Dumper;

# simple procedural interface
print Dumper($foo, $bar);
Run Code Online (Sandbox Code Playgroud)

  • Data :: Dumper是一个标准模块,与Perl一起安装.要获取所有标准语用和模块的列表,请参阅`pelrdoc perlmodlib`. (4认同)

Eug*_*ash 7

检查/调试检查Data::Printer模块.它只是做一件事而且只做一件事:

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

用法示例:

use Data::Printer;  
p @array;  # no need to pass references
Run Code Online (Sandbox Code Playgroud)

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

   [
       [0] "a",
       [1] "b",
       [2] undef,
       [3] "c",
   ]
Run Code Online (Sandbox Code Playgroud)