如何从hashref中的数组中弹出?

时间:2011-08-29 18:57:46

标签: arrays perl random hash 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和骰子类型之间的整数数组。

2 个答案:

答案 0 :(得分:7)

$$dice_stack{@_[0]} - 又名$dice_stack->{@_[0]} - 是hashref中的值。因此,它必然是一个标量,不能是一个可弹出的数组。

如果值是数组引用,则需要取消引用:

  return ( pop(@{ $dice_stack->{ @_[0] } }) );

如果它不是arrayref,则需要以其他方式访问它。

此外,这开始看起来很高兴 - 在线噪声的这一点上,我建议切换到更易读的代码(恕我直言):

  my ($dice_type) = @_;
  my $dice_list = $dice_stack->{$dice_type};
  return pop(@$dice_list);

答案 1 :(得分:1)

首先尝试解除引用数组:

pop(@{$dice_stack{@_[0]}})