【发布时间】:2013-10-14 13:20:57
【问题描述】:
当您转储数组时:
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开头?您不是在尝试解析 Dumper 输出吗?因为那确实是一个非常糟糕的主意。当使用Dumper()打印一个数组时,您应该向它发送一个引用,如下所示:print Dumper \@arr。 -
不,我不想解析 Dumper 输出,我想要的只是在输出中设置数组索引,就像在 perl 中一样(数组的第一个元素从零开始)
-
@WakanTanka 变量的名称几乎无关紧要,索引只是为了美观。如果这就是你想要它的原因:当
$arr[0]是$VAR0时你喜欢它,因为它更容易阅读(或其他东西),那很好。如果出于任何其他原因,您不应该这样做。无论你想出什么,它都将是脆弱和多余的。 -
你为什么要编写一个 Perl 脚本来对另一个 Perl 脚本的输出进行后处理?如果您使用
Data::Dumper只是为了打印漂亮的数组,您可以通过简单的for循环和single 脚本轻松获得相同的功能。 -
print "\$VAR$_ = '$arr[$_]';\n" for 0..$#arr
标签: arrays perl indexing data-dumper