开发者

How to pop from an array inside a hashref?

开发者 https://www.devze.com 2023-03-31 18:52 出处:网络
Brain getting foggy on this one.I wanted to take my dice game from using rand() to using a list of ra开发者_StackOverflowndom values from random.org.I was able to retrieve the values just fine, I\'m j

Brain getting foggy on this one. I wanted to take my dice game from using rand() to using a list of ra开发者_StackOverflowndom values from random.org. I was able to retrieve the values just fine, I'm just hung up on the syntax to pop from the list.

Here's my function that's giving me fits:

sub roll_d
{
  return (pop($$dice_stack{@_[0]}));
  # Original code:
  #return (int(rand @_[0]) + 1);
}

Where $dice_stack is a pointer to a hash where the key is the dice type ('6' for d6, '20' for d20), and the value is an array of integers between 1 and the dice type.


$$dice_stack{@_[0]} - aka $dice_stack->{@_[0]} - is a VALUE in a hashref. As such, it will necessarily be a scalar and can't be a poppable-from-array.

If the value is an array reference, you need to de-reference:

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

If it's NOT an arrayref, you need to access it in some other way.

Also, this is starting to look golfish - at this point of line noisiness, I would recommend switching to more readable code (IMHO):

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


Try dereferencing the array first:

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

精彩评论

暂无评论...
验证码 换一张
取 消