-2

我有几个不同名称的数组。以下是我的数组名称。

@node_level1_1_1=read_array_level2(@node_level1_1);
@node_level1_2_1=read_array_level2(@node_level1_2);
...
@node_level1_11_1=read_array_level2(@node_level1_11);

我想解析从@node_level1_1_1 到@node_level1_11_1 的另一个子例程函数的数组。我尝试编写这段代码,但没有成功。

for ($j=1; $j < 12; $j++) {

  my $var= output_data_xml_nodes(4,@node_level1_$j_1);

}

当我运行代码时,它会引发以下错误:

标量在 ./html_parser1.pl 第 153 行,“@node_level1_$j_1”附近找到运算符预期的位置($j_1 之前缺少运算符?) ./html_parser1.pl 第 153 行,“@node_level1_$j_1”附近的语法错误/html_parser1.pl 由于编译错误而中止。

是否有任何增加数组的。请告诉我。

谢谢, 阿南德

4

2 回答 2

3

我认为您需要使用更复杂的数据结构。虽然创建变量名是可能的(使用no strict 'refs'; @{construct string here}),但它是邪恶的、错误的、不可维护的等。它只适用于全局变量*颤抖*

您的代码示例应如下所示:

my @new_node;
$new_node[1][1][1]  = read_array_level2($old_node[1][1]);
$new_node[1][2][1]  = read_array_level2($old_node[1][2]);
...;
$new_node[1][11][1] = read_array_level2($old_node[1][11]);

或者更好,使用循环

my @new_node;
for my $i (1 .. 12) {
    $new_node[1][$i][1] = read_array_level2($old_node[1][$i])
}

但是,大多数时候您将处理数组引用,而不是数组。阅读和重新阅读

和朋友。

于 2012-12-12T06:45:31.433 回答
1

一种方法是使用哈希:

use strict;
use warnings;

my @array_1 = (1, 11);
my @array_2 = (2, 22);
my %arrays  = ( 
  array_1 => [ @array_1],
  array_2 => [ @array_2]
);

for my $i (1, 2) {
  print join(",", @{$arrays{"array_$i"}}), "\n";
}

另一种方法是使用 eval:

use strict;
use warnings;

my @array_1 = (1, 11);
my @array_2 = (2, 22);

for my $i (1, 2) {
  my $array_ref = eval('\@'."array_$i");
  print join(",", @$array_ref), "\n";;
}
于 2012-12-12T06:34:14.593 回答