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
Try the following code:
while (<FH>)
{
      (my $person) = $_ =~ /person=(\S+)/;
}

# i am passing just the $person
if (($personstatus = verify($person)==1))
{
      print "Found $person in hash";
}
else
{
      print"sorry";
}

sub verify
{
      (my $per) = @_;
      foreach $temp(sort keys %where)
      {
            if ($temp eq $per)
            {
                  $found =1 ;
                  goto xxx;
            }
      }
      xxx:
      return $found;
}








____________________________________________________________________________________

Don't pick lemons.
See all the new 2007 cars at Yahoo! Autos.
http://autos.yahoo.com/new_cars.html


Whilst this email has been checked for all known viruses, recipients should 
undertake their own virus checking as Xansa will not accept any liability 
whatsoever.

This email and any files transmitted with it are confidential and protected by 
client privilege.  It is solely for the use of the intended recipient.
Please delete it and notify the sender if you have received it in
error. Unauthorised use is prohibited.

Any opinions expressed in this email are those of the individual and not
necessarily the organisation.
     Xansa, Registered Office: 420 Thames Valley Park Drive,
     Thames Valley Park, Reading, RG6 1PU, UK.
     Registered in England No.1000954.
     t  +44 (0)8702 416181
     w  www.xansa.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to