我有几个名字不同的数组。以下是我的数组名称。
@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由于编译错误而中止。
数组有增量吗?请告诉我。
谢谢, 阿南德
答案 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";;
}