David Gilden am Samstag, 18. Februar 2006 16.29:
> Good morning,

Good evening here ;-)

> I would like to populate a hash from a csv text file, then test for the
> existence  of a value in the hash. If not found return an error message and
> exit.
> ithe text file will have the format of:
> # whitelist created 2/18/06 or some other comment on the first line
> name1,nick1
> ---
> name25,nick25
> ---

I suppose the '---'s are not part of the file?


Don't forget:

use strict;
use warnings;

> my $approvedUser = pram('approvedUser'); # cgi.pm
>
> my $whitelist = './'whitelist.txt;

This line leeds to a syntax error, look at/after the second single quote.

> my %hash

my %hash;

> open(EL,"$whitelist") ||  &errorMessage( "Read in, Could not find
> $whitelist, $!"); 

No need to double quote $whitelist in the first line.

You use an error sub to write an error out and to exit with an *ok* exit 
status. although the script won't do what it shold. The better way would be 
to die:

open (EL, '<', $whitelist) or die "Read in, Could not find $whitelist, $!";

> my @lines = <EL>; 
> close(EL);

close EL or die $!;

> foreach(@lines){
>     next if /#/;

This skips also lines with a '#' not at the beginning.

next if /\s*#/;

>     my($key,$val)= split (@lines,",");

You are within a loop processing a single line of @lines (which is hold in 
$_), and did not read perldoc -f split:

my($key,$val)= split ',', $_;

>    $hash{$key} = $val;
>  }
> close(EL);

EL is alredy closed.

> if (!defined $approvedUser =~ %hash){
>     &errorMessage( "your not an authorized user")
> }

print "your not an authorized user"
   unless exists $hash{$approvedUser};

This is a simple test for existence of a key in a hash. See 
perldoc -f exists

> errorMessage(message){
> shift;
> print "$_\n";
> exit;
> }

No need for that anymore.

> How close am I to having a working script, I have guessed at some of syntax
> here, and am not familiar with using 'defined'.

use strict will reveal syntax guesses.


BTW, there is also a short way to get the data into %hash. Before just using 
it, please read the man pages for map and grep.
(The usage of __DATA__ and <DATA> is a handy way to simulate file input).

===
#!/usr/bin/perl
use strict;
use warnings;

my %hash=map {split ',', $_} grep {$_!~/\s*#/} (<DATA>);

use Data::Dumper;
print Dumper \%hash;

__DATA__
# a comment
name1,nick1
name25,nick25
===


hth,
Hans

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


Reply via email to