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

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; }

Replies are listed 'Best First'.
Re^7: Edit in place (part2)
by Corion (Patriarch) on May 02, 2006 at 15:32 UTC

    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...