【发布时间】:2014-08-07 15:17:14
【问题描述】:
如何打印数组的值。我尝试了几种方法,但无法从数组中获取所需的值:
@数组; Dumper 输出如下:
$VAR1 = [
'a',
'b',
'c'
];
$VAR1 = [
'd',
'e',
'f'
];
$VAR1 = [
'g',
'h',
'i'
];
$VAR1 = [
'j',
'k',
'l'
];
for my $value (@array) {
my $ip = $value->[0];
DEBUG("DEBUG '$ip\n'");
}
我得到如下输出,这意味着foreach 实例我只得到第一个值。
a
d
g
j
我尝试了几种方法:
第一个选项:
my $size = @array;
for ($n=0; $n < $size; $n++) {
my $value=$array[$n];
DEBUG( "DEBUG: Element is as $value" );
}
第二个选项:
for my $value (@array) {
my $ip = $value->[$_];
DEBUG("DEBUG Element is '$ip\n'");
}
最好的方法是什么?
【问题讨论】:
-
my $ip = join "", @$value; -
非常感谢!!!你是天才!!!
-
您获得每个数组的第一个值,因为
my $ip = $value->[0];取消引用每个数组的第一个[0]索引位置的值。您想取消引用(并循环)“外部”数组(在本例中为@array)中的每个匿名数组。您的“第一个选项”更接近(您正在尝试循环),但您正在循环外部数组的“$size”而不是每个内部匿名数组。您的第二个选择是犯同样错误的更短的方法:-) 这是一个常见错误:循环和取消引用是不同的 - 但它们经常同时发生! -
@G.Cito 非常感谢您的解释。
-
如果您查看@mpapec 提供的解决方案,它基本上告诉编译器循环变量
$value是一个数组(由该标量引用),这就是为什么印记看起来像:@$。如果您在代码中使用Perl::Critic和--cruel选项,您会发现@{ $value }是首选(即 Perl 最佳实践)语法。 :-)
标签: perl