in reply to perl command line prompts
I think Forsaken is on the right track (your program is waiting for $/, which is now "\x00", to finish reading the user's input, but it is getting newlines instead), but I also think that you need that $/ = "\x00" for what your program is doing. Refraining from refactoring your code too much:
my $orig_IRS = $/; # save the original input record separator $/ = "\x00"; while (<$ORIG>) { $count = (($change = $_) =~ s/(\x33\x33\x39\x39.*?\x00)/"\x00" x length($1)/e); if ($count == null) { print $MOD $_; } else { local $/ = $orig_IRS; # restore input record separator locally $answer = &promptUser("Modify $1?"); if ($answer == "y") { print $MOD $change; } else { print $MOD $_; } }
Alternatively, you could set the terminal to raw mode, so that the user did not need to hit Enter after y/n. See the ReadMode function of Term::ReadKey.
Update: Another possibility is to make this single change to your script:
while ( defined ( $_ = do { local $/ = "\x00"; <$ORIG> } ) ) { # ... }
the lowliest monk
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: perl command line prompts
by pccode (Novice) on May 16, 2005 at 20:08 UTC | |
by holli (Abbot) on May 16, 2005 at 20:23 UTC | |
by Transient (Hermit) on May 16, 2005 at 20:28 UTC | |
by tlm (Prior) on May 16, 2005 at 21:17 UTC | |
by pccode (Novice) on May 16, 2005 at 21:22 UTC |