脑子越来越模糊了。我想把我的骰子游戏从使用rand()改为使用random.org上的随机值列表。我能够很好地检索值,我只是挂在从列表弹出的语法上。
这是我给我的函数:
sub roll_d
{
return (pop($$dice_stack{@_[0]}));
# Original code:
#return (int(rand @_[0]) + 1);
}
其中$dice_stack是一个指向散列的指针,其中键为骰子类型(d6为'6',d20为'20'),值为1到骰子类型之间的整数数组
$$dice_stack{@_[0]}
(即$dice_stack->{@_[0]}
)是hashref中的VALUE。因此,它必须是一个标量,而不能是poppable-from-array。
如果该值是数组引用,则需要取消引用:
return ( pop(@{ $dice_stack->{ @_[0] } }) );
如果它不是一个数组ref,你需要通过其他方式访问它。
同样,这开始看起来像高尔夫球——在这一点上,行噪声,我建议切换到更可读的代码(IMHO):
my ($dice_type) = @_;
my $dice_list = $dice_stack->{$dice_type};
return pop(@$dice_list);
尝试先解引用数组:
pop(@{$dice_stack{@_[0]}})