如何在perl中将数字附加到数组名称

时间:2012-12-12 06:26:30

标签: perl

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

@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);

}

运行代码时会抛出以下错误:

  

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

数组有增量吗?请告诉我。

谢谢, 阿南德

2 个答案:

答案 0 :(得分:3)

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

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

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])
}

但是,大多数情况下,您将处理数组引用,而不是数组。阅读并重新阅读

和朋友们。

答案 1 :(得分: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";;
}