Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re: system( ), printing output & matching

by ozone (Friar)
on Apr 05, 2002 at 19:42 UTC ( #157037=note: print w/replies, xml ) Need Help??

in reply to system( ), printing output & matching

You've got several problems here:
  • you do a Perl 'open' on the file
  • you then do a Unix redirect to the file (which perl now has open - dangerous)
  • your Unix redirect doesn't append, it overwrites - you need a '>>' instead of a '>' before 'pingall.list' in your system call
  • then you don't close the file before opening it for read. This is not strictly a bad thing, but you should do this for neatness sake

So, what I think is happening is that Perl has the file open, then you use system calls to write to it. Then you do the second Perl open, which causes perl to flush out what it thinks should be in the file (which is nothing) and so you land up with an empty file.

check out Net::Ping for an easier way to do the pinging

  • Comment on Re: system( ), printing output & matching

Replies are listed 'Best First'.
Re: Re: system( ), printing output & matching
by zuinc (Novice) on Apr 05, 2002 at 20:16 UTC
    I made some changes but continue to get the same output, 'ERROR'. I know my code was kinda messy and i tried to clean it up by closing all the filehandles before reopening them and a few other changes. Heres what I have:
    # Create a list of all possible IP addresses within subnet open(ALLIP, ">allip.list") || die "Unable to create file: allip.list\n +"; for ($i=0; $i<=20; $i++) { print ALLIP "$ip_subnet.$i\n"; } close(ALLIP); open(ALLIP, "allip.list") || die "Unable to open file: allip.list\n"; open(PINGALLIP, ">pingallip.list") || die "Unable to open file: pingal +lip.list"; while (<ALLIP>) { system("ping $_ >pingallip.list") && "Unable to create file: p +ingallip.l ist"; chomp; } close(ALLIP); close(PINGALLIP); open(OUTPUT, ">output.list"); open(PINGALLIP, "pingallip.list") || die "Unable to open file: pingall +ip.list"; my $line = 0; while (<PINGALLIP>) { chomp; if ($_ =~ m/is alive/) { $line++; last; } } close(PINGALLIP); if ($line) { print OUTPUT "$_\n"; } else { print "ERROR\n"; }
    Any more help would be greatly appreciated. ~_^

      open(ALLIP, "allip.list") || die "Unable to open file: allip.list\n"; while (<ALLIP>) { chomp; system("ping $_ >>pingallip.list"); }

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (3)
As of 2022-05-28 02:24 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (98 votes). Check out past polls.