Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Perl - Data::Dumper array - start indexing at 0

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?

like image 655
Wakan Tanka Avatar asked Dec 21 '25 09:12

Wakan Tanka


2 Answers

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.

like image 119
FMc Avatar answered Dec 22 '25 23:12

FMc


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'
        ];
like image 24
ysth Avatar answered Dec 23 '25 00:12

ysth



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!