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
In reply to Re: perl command line prompts
by tlm
in thread perl command line prompts
by pccode
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |