使用以下命令转储数组时
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];
我可以以某种方式扩展这种单线程吗?
答案 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}});