Примеры:
%hash = (2010 => 21, 2009=> 9);
$hash = {
a => {
0 => {test => 1},
1 => {test => 2},
2 => {test => 3},
3 => {test => 4},
},
};
Как я печатаю хеш?
использовать ключи, значения
функция
@keys = keys %hash ;
@values = values %hash
Это должно помочь:
foreach $key (keys %hash)
{
print "key is : $key, value is : $hash{$key}\n";
}
ура
{{ 1}}Синтаксис для доступа к внутренним ячейкам для вашего второго примера выглядит так:
print $hash->{"a"}{0}{"test"}
Это даст вам 1 в вашем примере .
Если вы хотите повторить его, вы можете сделать это следующим образом (строки печати приведены для целей иллюстрации):
my $hash = {"a"=>{ 0=>{"test"=>1}, 1=>{"test"=>2}, 2=>{"test"=>3}, 3=>{"test"=>4} } };
print "Direct access to item : ".$hash->{"a"}{1}{"test"}."\n";
foreach my $k1 (keys(%$hash)) {
print "keys of level 1: $k1\n";
foreach my $k2 (keys(%{$hash->{$k1}})) {
print "keys of level 2: $k2\n";
print "values: ".$hash->{$k1}{$k2}{"test"}."\n"
}
}
Обратите внимание, что все немного сложнее, чем необходимо, потому что внешний $ hash является скалярной ссылкой на анонимный хеш. Было бы проще, если бы это был хэш (например, как в my% hash = (1, 2); print $ hash {1};
).
( TIMTOWTDI : очевидно, есть несколько способов сделать это; я считаю, что приведенный выше пример является для меня самым простым, но не самым эффективным; использование каждого
вместо ключи
для итерации позволили бы избежать одного ненужного поиска по хэшу).
printf ("%s = %s\n", $_, $hash {$_}) foreach (keys (%hash));
Вы хотите распечатать весь хэш или отдельные пары ключей и значений? И каков желаемый результат? ЕСЛИ это просто для отладки, вы можете сделать что-то вроде:
use Data::Dumper;
print Dumper %hash; # or \%hash to encapsulate it as a single hashref entity;
Вы можете использовать функцию each
, если вам не нужен порядок:
while ( my($key, $value) = each %hash ) {
print "$key = $value\n";
}
Или для
/ foreach
конструкция, если вы хотите ее отсортировать:
for my $key ( sort keys %hash ) {
print "$key = $hash{$key}\n";
}
Или, если вам нужны только определенные значения, вы можете использовать хеш-срез, например:
print "@hash{qw{2009 2010}}\n";
и т. Д. И т. Д. Всегда есть более одного способа сделайте это, хотя это помогает понять, что вы жарите в первую очередь :)
вместо
%hash = { 2010=> 21, 2009=> 9 }
вы должны написать
%hash = ( 2010=> 21, 2009=> 9 );
с фигурными скобками вы получите ССЫЛКУ на анонимный хэш, который затем сохраняется в качестве первого ключа %hash.