$$dice_stack{@_[0]}
- иначе $dice_stack->{@_[0]}
- это ЗНАЧЕНИЕ в хэш-функции. Таким образом, это обязательно будет скаляр и не может быть poppable-from-array.
Если значение является ссылкой на массив , необходимо отменить ссылку:
return ( pop(@{ $dice_stack->{ @_[0] } }) );
Если это НЕ массив, вам нужно получить к нему доступ другим способом.
Кроме того, это начинает выглядеть по-гольфистски - на этом этапе шумности линии я бы рекомендовал перейти на более читаемый код (ИМХО):
my ($dice_type) = @_;
my $dice_list = $dice_stack->{$dice_type};
return pop(@$dice_list);