On Mon, 15 Mar 2004, James Taylor wrote:

> I'm modifying a script someone wrote that basically reads a file file 
> into STDIN, and I was curious if there was anyway of modifying the 
> stdin value without having to first open the file, modify it, close the 
> file, and then open it into stdin.
> 
> Basically, looks like:
> 
> open(STDIN,$filename) || die "whatever\n";
> close(STDOUT);
> 
> Well, I need to to a search/replace on STDIN, something like:
> 
> open(STDIN,$filename) || die "blah\n";
> STDIN =~ s/one/two/g;
> close(STDOUT);
> 
> Line 2 isn't intended to work, it's just there to show you what i'm 
> trying to accomplish.
> 
> Thanks for your help!
> 

>From reading some of the other replies, I gather what you'd like to do is 
modify the STDIN going into another, unmodifiable, script/program. 
Correct? One possibility is:

myscript input.file | oldscript

Where "myscript" is:

#!/usr/bin/perl
while(<>) {
        s/one/two/g;
        print;
}

This reads "input.file" and changes all occurrances of "one" to "two" and 
prints them to STDOUT. The pipe then sends this data on to "oldscript".
Another possibility:

#!/usr/bin/perl
open(fh,"|oldscript") or die "Cannot open pipe to oldscript: $!";
while (<>) {
        s/one/two/g;
        print fh;
}

You'd then invoke this as:

myscript input.file

Is this what you wanted?

--
Maranatha!
John McKown


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to