Examples:
%hash = (2010 => 21, 2009=> 9);
$hash = {
a => {
0 => {test => 1},
1 => {test => 2},
2 => {test => 3},
3 => {test => 4},
},
};
How do I print the hash?
Examples:
%hash = (2010 => 21, 2009=> 9);
$hash = {
a => {
0 => {test => 1},
1 => {test => 2},
2 => {test => 3},
3 => {test => 4},
},
};
How do I print the hash?
use keys , values
function
@keys = keys %hash ;
@values = values %hash
Hi
This should help:
foreach $key (keys %hash)
{
print "key is : $key, value is : $hash{$key}\n";
}
cheers
instead of
%hash = { 2010=> 21, 2009=> 9 }
you should write
%hash = ( 2010=> 21, 2009=> 9 );
with the curly braces you get a REFERENCE to an anonymous hash, which is then stored as the first key of you %hash.
Do you want to print the entire hash, or specific key, value pairs? And what is your desired result? IF it's just for debugging purposes, you can do something like:
use Data::Dumper;
print Dumper %hash; # or \%hash to encapsulate it as a single hashref entity;
You can use the each
function if you don't care about ordering:
while ( my($key, $value) = each %hash ) {
print "$key = $value\n";
}
Or the for
/ foreach
construct if you want to sort it:
for my $key ( sort keys %hash ) {
print "$key = $hash{$key}\n";
}
Or if you want only certain values, you can use a hash slice, e.g.:
print "@hash{qw{2009 2010}}\n";
etc, etc. There is always more than one way to do it, though it helps to know what you're frying to do first :)
Syntax to access inner cells for your second example is like:
print $hash->{"a"}{0}{"test"}
That will give you 1 in your example.
If you want to iterate on it, you can do it as follows (print lines are for illustration purposes):
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"
}
}
Notice that things are a bit more tricky than necessary because the external $hash is a scalar reference to an anonymous hash. It would be simpler if it was a hash (i.e., like in my %hash = (1, 2); print $hash{1};
).
(TIMTOWTDI: there is obviously more than one way to do it; I believe the above example is the simplest for me, but not the most efficient; using each
instead of keys
for iterating would avoid one unnecessary hash lookup).