Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re^3: File reading with hashes

by Random_Walk (Prior)
on Aug 08, 2013 at 11:22 UTC ( [id://1048548]=note: print w/replies, xml ) Need Help??


in reply to Re^2: File reading with hashes
in thread File reading with hashes

Can you try this version and see if any files are opened?

#!/usr/bin/perl use strict; use warnings; # my $fname = '.profile'; my $fname = 'MY_FILE'; my %users = %{user_paths()}; for my $user (keys %users) { my $fh; if (open $fh, '<', "$users{$user}/$fname") { while (my $line = <$fh>) { if ($line =~ /BASE_PORT=(\d+)/) { print "$user --> $1"; } } } else { warn "couldn't open $users{$user}/MY_FILE $!"; } } 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; }

Cheers,
R.

Pereant, qui ante nos nostra dixerunt!

Replies are listed 'Best First'.
Re^4: File reading with hashes
by Bindo (Acolyte) on Aug 09, 2013 at 12:04 UTC

    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.

      Is it possible a user has a folder called MY_FILE ? . If so, this code should find it .
      foreach my $user (keys %users) { my $fh; my $file = "$users{$user}/$fname"; if (-d $file){ print "$file is directory for user $user\n"; } elsif (-e $file ) { open ($fh, '<', $file) or warn "Could not open $file for user $use +r :$!" ; while (my $line = <$fh>) { if ($line =~ /S_REG_PORT_NO=(\d+)/) { print " $user --> $1\n"; } } } else { print "$file does not exist for user $user\n"; } }
      poj

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1048548]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (4)
As of 2024-04-24 20:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found