in reply to Re: Accessing a file from the perl
in thread Accessing a file from the perl

Your main problem is that you're checking ne

if($name ne $user) {

so, unless every entry in the USERNAME file holds the name in question, this will match and quit with ERR.

Also, your way of reading the file

while(<USERNAME>) # reads first entry { my @newusername = <USERNAME>; # reads remaining entries foreach $name (@newusername) ...

skips the first entry for the comparison...

Try something like this:

... my $found; while (my $name = <USERNAME>) { if ($name eq $user) { $found = 1; last; } } unless ($found) { print $client_socket "ERR\n"; ... exit; } print $client_socket "ACK\n";

And either chomp both $user and $name, or none.  As you have it, $name has a trailing \n, while $user hasn't.

Replies are listed 'Best First'.
Re^3: Accessing a file from the perl
by abcdefg (Acolyte) on Jan 12, 2012 at 00:03 UTC
    $user = <$client_socket>; chomp($user); #remove the \n print "$prefix USER = $user\n"; unless (open (USERNAME, "username")) { print "ERROR:Cannot open username file.\n"; exit(1); # ERROR } my $found; while(my $newusername = <USERNAME>) { chomp($newusername); if($newusername eq $user) { $found = 1; last; } unless ($found) { print $client_socket "ERR\n"; print "$prefix ERROR: user $user not allowed Exiting. +\n"; close(USERNAME); exit(1); } } #else, continue print $client_socket "ACK\n"; # approve the user. #print "user $user is allowed."; close(USERNAME);

    I tried what you said as above but still it got same problem..still its not goin on else part where user is approved.

      The unless ($found) check needs to be after the while loop, not within  (before having run through the entire file, you cannot tell whether a matching entry was found...)

        thanks a lot eliya..it worked.