In the first line of the sub, assign local names to the input parameters by putting them into a list context with parens and assigning @_ to that. This is helpful as documentation of the interface - the main thing a caller would need to know is right there on that one line (assuming that we've got some good names).
It is possible to just de-reference the hash_ref which avoids having to make a local copy of the hash (if the hash is big, this will speed things up considerably).
#!/usr/bin/perl -w use strict; use Data::Dumper; # a core module (no installation needed) my %hash = ( a=> 11, b=>22); my $value = ("something"); marine ($value, \%hash); sub marine { my ($line, $hash_ref) = @_; # parens needed for list context print "$line\n"; print "hash value of key a is $hash_ref->{a}\n"; #no local copy my %local_hash_copy = %$hash_ref; #makes complete local copy print Dumper \%local_hash_copy; } __END__ something hash value of key a is 11 $VAR1 = { 'a' => 11, 'b' => 22 };
In reply to Re: hash to sub
by Marshall
in thread hash to sub
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |