Perl - Data::Dumper array - start indexing at 0
Solution 1
The Dump
method takes an optional second array ref where you can specify the desired variable names in the output:
my @arr = ('a', 'b', [qw(d e f)]);
my @names = map "VAR$_", 0 .. $#arr;
print Data::Dumper->Dump(\@arr, \@names);
Output:
$VAR0 = 'a';
$VAR1 = 'b';
$VAR2 = [
'd',
'e',
'f'
];
You might also take a look at Data::Printer. I've never used it, but it seems more oriented to the visual display of data structures.
Solution 2
Whatever you are trying to do with $VARx, it isn't a good idea. How about just dumping \@arr
instead of @arr
?
use Data::Dumper;
@arr=('a','b','c');
print Dumper \@arr;
producing:
$VAR1 = [
'a',
'b',
'c'
];
Wakan Tanka
Enthusiastic and passionate for computers and technology, my workhorses: perl, bash, python, tcl/tk, R. LaTeX, Unix
Updated on June 04, 2022Comments
-
Wakan Tanka almost 2 years
When you dump your array with:
use Data::Dumper; @arr=('a','b','c'); print Dumper @arr;
you get something like this:
$VAR1 = 'a'; $VAR2 = 'b'; $VAR3 = 'c';
Is possible to get something like this:
$VAR0 = 'a'; $VAR1 = 'b'; $VAR2 = 'c';
EDIT:
So far I have end up with this one-liner:
perl -lane 'if ($_=~/VAR([0-9]+) = (.*)/) {print "VAR" . ($1-1) . "=" . $2} else {print $_}'
It works as post processing script which decrement the number after VAR. But as you can see it wont produce correct output when you have element like this:
VAR7=$VAR2->[1];
Can I somehow extend this one-liner?