in reply to Re^4: Edit in place (part2)
in thread Edit in place (part2)

Then simplify the function until either 1) the error goes away (in which case you found the problem), or 2) the code is safe to post. How come you're not using Socket's inet_ntoa anyway? Example

Replies are listed 'Best First'.
Re^6: Edit in place (part2)
by jzb (Hermit) on May 02, 2006 at 15:28 UTC
    Ok here is a very simple script demonstrating the problem. If you comment out the input for hereistheip() and substitiute a static variable it works. This has to be due to the <>. Remember, this is to run under perl 5.005_03 only!
    #!/usr/bin/perl -w use strict; use diagnostics; mysub(); sub mysub{ my $vari = hereistheip(); print "This is the IP you entered --> $vari\n"; local $^I = ".bak"; @ARGV = "stuff"; while (<>) { s/FOO/$vari/i; print; } } sub hereistheip{ print "Enter a valid server IP \n --> "; my $myip = <>; chomp $myip; return $myip; }

      You're reading from the console via the <> operator. The script will only continue to the next file (as given via @ARGV) once the current file has been completely read. If you want to continue that dangerous road, you'll have to type an EOF (^Z on Win32, ^D on Unixish operating systems) after you've entered the IP address.

      Let me suggest ditching the in-place-edit magic and reimplementing the loop yourself. That way, you can do away with the diamond-operator/@ARGV magic and use explicit filehandles. Maybe it's already enough to change hereistheip to the following:

      sub hereistheip { print "Enter a valid server IP\n -->"; my $myip = <STDIN>; chomp $myip; return $myip; };

      But I really think you're better off ditching the whole in-place approach and doing it yourself.

        Holy crap I feel stupid. I equated <> to be the same at <STDIN>.
        Problem solved...