2013-11-14 1 views
1

Как разыменовать такую ​​переменную, чтобы получить «99» и «Проблема в параметре»?Derefence hash переменной хэша

DB<103> print Dumper($error_code); 
    $VAR1 = \{ 
      '99' => 'Problem in Parameter' 
      }; 


    DB<104> x $error_code 
    0 REF(0x30393f34) 
    -> HASH(0x30393ea4) 
     99 => 'Problem in Parameter' 

ответ

0

Как насчет:

my ($key, $value) = each %$$error_code; 
say $key; 
say $value; 

выхода:

99 
Problem in Parameter 
+0

испытаны ли вы его? Существует опечатка ('my' должен быть строчным) и ошибка времени выполнения. – choroba

+0

@choroba: Ты прав, исправлено. – Toto

+0

Примечание. Использование 'each' таким образом оставит итератор хэши в середине хэша, нарушая любое последующее использование' each'. Просто избавитесь от слова «каждый», и проблему полностью избежать. – ikegami

1

У вас есть ссылки на ссылки. Вы должны удвоить разыменования, сначала в качестве скаляра, чем в виде хэша:

my $error_code = \{ 
    '99' => 'Problem in Parameter' 
}; 
my ($ninety_nine) = keys %$$error_code; 
my $string  = ${$error_code}->{$ninety_nine}; 
print "$ninety_nine, $string\n"; 
+0

Примечание. Использование 'each' таким образом оставит итератор хэши в середине хеша, нарушая любое последующее использование' each'. Просто избавитесь от слова «каждый», и проблему полностью избежать. – ikegami

1

У вас есть ссылка на ссылку на хэш. Поэтому вам нужны две разницы.

$error_code A reference to a reference to a hash 
$$error_code A reference to a hash 
%$$error_code A hash 

Так,

my ($key, $value) = %$$error_code; 
say $key; 
say $value; 
Смежные вопросы