如何从hashref中的数组中弹出



脑子越来越模糊了。我想把我的骰子游戏从使用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]}})

最新更新