Perl匿名哈希添加新键值对时出现编译错误问题
解决Perl编译错误:未声明变量提前使用问题
嘿,我一眼就瞅到你代码里的问题啦!你遇到的编译错误,根源是变量声明顺序搞反了——你在使用$design这个哈希引用之前,还没来得及用my声明它呢!
错误代码的核心问题
看你这段代码的执行顺序:
my $selected = 'box'; my $d = $design->{$selected}; # 这里$design还没被声明,Perl根本不知道它是什么! my $design = { box => { ne => {data => 'north-east'}, nw => {data => 'north-west'}, n => {data => 'north'}, s => {data => 'south'}, e => {data => 'east'}, w => {data => 'west'}, se => {data => 'south-east'}, sw =>... } };
Perl里用my声明的词法变量,只有在声明语句之后才会在当前作用域生效。你提前调用$design,Perl会判定这是一个未声明的变量,直接抛出编译错误。
修正后的代码
只需要把$design的声明移到使用它的语句之前就行:
my $selected = 'box'; # 先声明并初始化$design哈希引用 my $design = { box => { ne => {data => 'north-east'}, nw => {data => 'north-west'}, n => {data => 'north'}, s => {data => 'south'}, e => {data => 'east'}, w => {data => 'west'}, se => {data => 'south-east'}, sw => {data => 'south-west'} # 补全你省略的内容 } }; # 现在可以正常访问$design的键值对了 my $d = $design->{$selected};
额外小提示
如果之后还要给这个哈希引用添加新的键值对,直接用$design->{new_key} = new_value;的格式就可以,比如:
# 给box添加一个新的方向键 $design->{box}->{center} = {data => 'center'};
内容的提问来源于stack exchange,提问作者Martin Kenley
相关产品推荐
相关产品推荐

