根据perl中的散列本身定义散列值

时间:2014-07-14 11:59:58

标签: perl

我想以这样的方式修复以下代码,以便获得下面给出的所需输出。但是我发现这两个印刷语句不能同时发挥作用。

代码:

our %HASH=(
    elem1=>["FD1","FD2",$arr_path[0]],
    elem2=>["FD4","FD5",$arr_path[1]],
);
my @arr_path=(
    "/abc/def/$HASH{elem1}[0].ctrl",
    "/abc/def/$HASH{elem1}[1].ctrl"
);

    print "\nPrinting path from HASH  :". $HASH{"elem1"}[2];
    print "\nPrinting path from arr_path  :". $arr_path[0];
    print "\n";

获得的输出:

Printing path from HASH  :
Printing path from arr_path  :/abc/def/FD1.ctrl

期望的输出:

Printing path from HASH  :/abc/def/FD1.ctrl
Printing path from arr_path  :/abc/def/FD1.ctrl

1 个答案:

答案 0 :(得分:1)

你不能让两个变量相互依赖。

你可以做的是:

our %HASH=(
  elem1=>["FD1","FD2",],
  elem2=>["FD4","FD5",],
);
my @arr_path=(
    "/abc/def/$HASH{elem1}[0].ctrl",
    "/abc/def/$HASH{elem1}[1].ctrl"
);

$HASH{elem1}[2] = $arr_path[0];
$HASH{elem2}[2] = $arr_path[1];

但这有点令人困惑。

我认为您需要重新考虑数据结构并从一个结构中获取数据,计算所需的相关信息。 (如果性能有问题,请使用memoization。)