Hi, I've copied your codes and format them on my editor and it seems run well for me.
use warnings; use strict; my %where=( Gary => "Dallas", Lucy => "Exeter", Ian => "Reading", Samantha => "Oregon" ); my $logfile = 'foo.txt'; open FH, '<', $logfile or die "Can't open $logfile!: $!"; while (<FH>){ my ($person) = /person=(\S+)/; my $personstatus = verify(\%where,$person); if ($personstatus) { print "$person exist\n"; } } close FH; sub verify { my $where = shift @_; my $person = shift @_; my $personstatus; if (exists $where->{$person}){ # use '->' operator for hash's reference # if (exists $$where{$person}){ # this line also can work $personstatus =1; }else { $personstatus = 0; } $personstatus; } Jeff Pang 2007-01-18 发件人: Michael Alipio 发送时间: 2007-01-18 14:26:00 收件人: begginers perl.org 抄送: 主题: Passing hash into sub routines (should i use reference?) Hi, Suppose I have this code: #/usr/local/bin/perl use warnings; use strict; use subs 'verify'; my %where=( Gary = > "Dallas", Lucy = > "Exeter", Ian = > "Reading", Samantha = > "Oregon" ); # Then i open a logfile open FH, ' <', $logfile or die "Can't open $logfile!: $!"; # Now, for every line in the logfile, I will retrive a particular string, let's say a person's name and verify if it exists in my hash above: while ( <FH >){ (my $person) = $_ =~ /person=(\S+)/; my $personstatus = verify(\%where,$person); # And do anything if the personstatus is this and that. # Now, on my sub "verify", I would like to know if the person exists in my hash. sub verify { my $where = shift @_; my $person = shift @_; my $personstatus; if (exists $$where{$person}){ $personstatus =1; }else { $personstatus = 0; } $personstatus; } Am I thinking as this is how it should be done when passing hashes to a subroutine? My program doesn't work and I know it has something to do with the "my $personstatus" line as well as "if (exists $$where{$person} line. Can you show me the right way of passing hashes to subroutines? Thanks. I also tried declaring %where as 'our' so that I can use "if (exists %where{$person}" instead of "if(exists $$where{person}) but i still can't make it work. Do you know if I am making any sense here? Thanks ____________________________________________________________________________________ Don't pick lemons. See all the new 2007 cars at Yahoo! Autos. http://autos.yahoo.com/new_cars.html