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