Hi Richard.

Richard Fernandez wrote:
> I just had a situation where I needed to replace one string with
> another string in 200 files.
> This is what I came up with, but I know there has to be a better way.
> Below is my code.
>
> "myfiles" contains a list of the files I need to scrub, one per line.
>
> -------8<-----------------8<-----------------------
> #!/usr/local/bin/perl -w
> use strict;
> $|++;
>
>
> my @files = `cat myfiles` or die;
> for (@files) {
>
>         chomp;
>         push @ARGV, $_;
> }
> $^I = ".bak"; # Got this from a previous message; thanks Peter!
> while (<>) {
>
>         s#/u01/app/webMethodsFCS#/u02/app/webMethodsFCSclone#g;
>         print;
>
> }

I don't think there's a better way, but it's a lot neater like this:

    #!/usr/local/bin/perl -i.bak

    use strict;
    use warnings;

    @ARGV = ( 'myfiles' );
    my @files = <>;
    chomp @files;

    @ARGV = @files;
    while (<>) {
        s(/u01/app/webMethodsFCS)(/u02/app/webMethodsFCSclone)g;
        print;
    }

    __END__

> ---------8<------------------8<-----------------------
>
> Seems to me there should be a way to provide the filenames on the
> command line
> w/o having to read the list into an array first, but I tried using
> xargs (this is unix) and a couple
> of other things but couldn't figure it out.

@ARGV contains the (globbed, if you're on Unix) list of files on the
command line. You can alter @ARGV to pretend that something was
there.

Can't remember my Unix too well, but doesn't

    script @myfiles

do what you want?

Cheers,

Rob




-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to