Thank you very much R, It worked. :) I owe a big apology to people who tried to help me out because I found out that the string I was looking for in the "MY_FILE" file was "SREG_PORT" not "BASE_PORT". I have wasted your time and mine over some silly thing that I should have easily realized. Sorry gentlemen
Mr R, with right key word being searched the script I initially mentioned in my question also works but I do get that readline error message printed only once on the screen. I tried tweaking the scrit a bit but no luck. Im gonna use your script as it is very clean and solid, but Id still like to realize what I have done wrong to get that error.
following is the output when I run my version of script
supun --> 40000
sam --> 25000
readline() on closed filehandle $fh at ./base_ports.pl line 11.
binasha --> 10000
bundy --> 37000
binjiya --> 5000
Following is my version of script
my $fname = 'MY_FILE';
my %users = %{user_paths()};
foreach my $user (keys %users) {
my $fh;
if (-e "$users{$user}/$fname") {
open ($fh, '<', "$users{$user}/$fname");
while (my $line = <$fh>) {
if ($line =~ /S_REG_PORT_NO=(\d+)/) {
print " $user --> $1\n";
}
}
}
}
sub user_paths {
my %users;
open my $fh, '<', "/etc/passwd" || die "Can't Open : $!";
while (<$fh>) {
my @user = split (/:/);
if ( $user[2] > 500 ) {
$users{$user[0]} = "$user[5]";
}
}
return \%users;
}
Only different thing Im doing here is that Im checking the existence of the file first with the "-e". Please help me figure this out. I just like to learn is all :) thanks again for helping out gentlemen. |