在perl中,如何使用变量值作为哈希元素

JIE*_*JIE 1 variables perl hash

我是Perl的新手,在Learning Perl一书中找不到问题的答案.

例如,我有一个像这样的数组:

my @loop=("op1_sel","op2_sel");
Run Code Online (Sandbox Code Playgroud)

和两个哈希表:

my %op1_sel=(
       "bibuf","000",
       "self","101"
            );
my %op2_sel=(
        "zero","1",
        "temp","0"
            );
Run Code Online (Sandbox Code Playgroud)

现在我想在循环中使用变量来循环特定键的哈希表,例如:

foreach(@loop)
{
     print  ${$_}{"bibuf"} ;
}
Run Code Online (Sandbox Code Playgroud)

但它似乎不起作用,我知道这${$_}部分是错的,任何人都可以告诉我如何解决这个问题?

Dal*_*aen 5

使用嵌套哈希.像这样:

my %op;
# put a hash reference into hash, twice
$op{op1_sel} = \%op1_sel; 
$op{op2_sel} = \%op2_sel;

# later ...
foreach (keys %op) {
    print "bibuf of $_: $op{$_}->{bibuf}\n";
};
Run Code Online (Sandbox Code Playgroud)

或者,长话短说,只是

my %op = (
    op1_sel => { 
        foo => 1,
        bar => 2,
        # ...
    },
    op2_sel => {
        # ...
    },
};
Run Code Online (Sandbox Code Playgroud)

{}构造创建对匿名哈希的引用,并且是处理嵌套数据结构的标准方法.

另见perldoc perldsc.