2

当您转储阵列时:

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

4 回答 4

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。我从未使用过它,但它似乎更面向数据结构的可视化显示。

于 2013-10-14T14:38:37.697 回答
3

无论你想用 $VARx 做什么,这都不是一个好主意。只是倾倒\@arr而不是倾倒怎么样@arr

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

生产:

$VAR1 = [
          'a',
          'b',
          'c'
        ];
于 2013-10-14T14:55:20.453 回答
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'
于 2013-10-14T13:31:57.297 回答
0

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

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

print Dumper(@{$hash->{stuff}->{fields}});
于 2018-11-13T18:39:55.177 回答