> -----Original Message-----
> From: David vd Geer Inhuur tbv IPlib
> [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, June 25, 2002 6:28 AM
> To: [EMAIL PROTECTED]; [EMAIL PROTECTED];
> [EMAIL PROTECTED]
> Subject: RE: if-statement and grep in one go
> 
> 
> 
> Hello,
> 
> Thanks for the solution Bob.
> Changed some stuff and have 2 questions open.
> 
>   my $line;
>   my (%u, %g);
>   open(FILE, "< ${dir}/user.perm") or print "Failed opening 
> file $!";     ## 1
>   while ($line = <FILE>) {                                    
>       ## 2
>       if ($line =~ /^user:/) {
>          $u{$_} = 1 for split(/,/, substr($line, 6));         
>       ## 3
>       }
>       if ($line =~ /^group:/) {
>          $g{$_} = 1 for split(/,/, substr($line, 7));         
>       ## 4
>       }
>   }
>   close(FILE);
> 
>   print "Invalid login"; exit unless $u{$pwuser} || 
> $g{$group};           ## 5

Somehow, I posted code other than that which I tested. Sorry about that.

For those that might be interested in such things, here is the exact code
I tested:

  #!/usr/bin/perl

  use Data::Dumper;

  my (%user, $group);
  while (my $line = <DATA>) {
    if ($line =~ /^user:\s*(.*)$/) {
     $user{$_} = 1 for split(/\s*,\s*/, $1);
    }
    if ($line =~ /^group:\s*(.*)$/) {
     $group{$_} = 1 for split(/\s*,\s*/, $1);
    }
  }

  print Data::Dumper::Dumper(\%user, \%group);

  __DATA__
  user: vdgeerd, tester
  group: none,
  descr: all,

I cut and pasted the sample input data you gave and put it
under a __DATA__ tag. This let me read it through the DATA
file handle. Data::Dumper was used to make sure the resulting
hashes came out to the structure I expected.

> 
> 1) I don't like to die in my script as there are many files 
> to read. And if I
>    can't open the current file I just want to continue with 
> the rest of the files
>    So I always prefer printing.

OK, no problem.

> 2) while my $line (<FILE>) didn't work, just a notation error.

My goof, sorry.

> 3) I don't need to split on spaces. The script that fills the 
> user.perm is 
>    designed to always : "user: vdgeerd,and,other  ## Never mind.
>    BUT, What do you do with the <1> ?? Changing it to $1 
> doesn't matter too.

I don't do anything with it. It's the keys that matter, not the values.
1 is just a dummy value, since each key must have a corresponding
value.

>    I keep empty places when doing a " foreach my $value(%u) { 
> print $value; } "
>    chomp %u; didn't work either.
> 4) Same as 3
> 5) I changed the && into || cause the user can have acces due 
> to group or user 
>    rights.
>    BUT, how do I combine a printing error message and an exit 
> within the unless ?
>    Right now it always prints, and only exits when I have no 
> permissions.

The semicolon makes the exit a separate statement, so you need
a comma. However, the comma will be treated as part of the print
unless you use parens. So the answer is:

   print("Invalid login"), exit unless $u{$pwuser} || $g{$group};

>    
> Thanks for all your previous help!!

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to