Perl - Data :: Dumper数组 - 开始索引为0

时间:2013-10-14 13:20:57

标签: arrays perl indexing data-dumper

使用以下命令转储数组时

use Data::Dumper;
@arr=('a','b','c');
print Dumper @arr;
你得到这样的东西:

$VAR1 = 'a';
$VAR2 = 'b';
$VAR3 = 'c';

有可能得到这样的东西:

$VAR0 = 'a';
$VAR1 = 'b';
$VAR2 = 'c';

修改

到目前为止,我最终得到了这个单行:

perl -lane 'if ($_=~/VAR([0-9]+) = (.*)/) {print "VAR" . ($1-1) . "=" . $2} else {print $_}'

它作为后处理脚本工作,减少VAR后的数字。但正如你所看到的,当你有这样的元素时它不会产生正确的输出:

VAR7=$VAR2->[1];

我可以以某种方式扩展这种单线程吗?

4 个答案:

答案 0 :(得分:4)

Dump方法采用可选的第二个数组ref,您可以在输出中指定所需的变量名称:

my @arr   = ('a', 'b', [qw(d e f)]);
my @names = map "VAR$_", 0 .. $#arr;

print Data::Dumper->Dump(\@arr, \@names);

输出:

$VAR0 = 'a';
$VAR1 = 'b';
$VAR2 = [
  'd',
  'e',
  'f'
];

您也可以查看Data::Printer。我从来没有使用它,但它似乎更倾向于数据结构的可视化显示。

答案 1 :(得分:3)

无论你想用$ VARx做什么,都不是一个好主意。如何只是转储\@arr而不是@arr

use Data::Dumper;
@arr=('a','b','c');
print Dumper \@arr;
制造

$VAR1 = [
          'a',
          'b',
          'c'
        ];

答案 2 :(得分:0)

您可以使用一些选项(请参阅:http://perldoc.perl.org/Data/Dumper.html

#!/usr/bin/perl
use warnings;
use strict; 
use Data::Dumper;
$Data::Dumper::Terse = 1; # This will print out just your output (in structure)
$Data::Dumper::Pad  = 'YOUR-PREFIX = '; # This prefixes your output with whatever you want

my @arr=('a','b','c');

print Dumper @arr;

输出:

YOUR-PREFIX = 'a'
YOUR-PREFIX = 'b'
YOUR-PREFIX = 'c'

答案 3 :(得分:0)

我有一个与问题类似的需求-我有一个带有固定数组的传入数据,并且想知道是否引用了正确的索引。从最初的问题来看,关于内部数组的部分似乎没有得到回答,因此也许这会对某人有所帮助。

对于内部数组,我不知道在树中执行此操作的方法,但是对于单个数组,只需取消引用即可:

print Dumper(@{$hash->{stuff}->{fields}});