manishrathi has asked for the wisdom of the Perl Monks concerning the following question:

I can read dir usiong opendir. If I want to rwad content of multiple files and substitute content of multiple files using regex, how can I do that ? Do I have to do it for individual files one by one or can I do for multiple files simultaneously thanks

Replies are listed 'Best First'.
Re: reading content from multiple files
by ikegami (Patriarch) on Jan 23, 2010 at 23:22 UTC

    how can I do that ?

    Well, regular expressions don't substitute contents of files. Neither does the substitute operator, which is probably what you meant. You'll need to read the file into memory in its entirety, apply the substitution, then write the text back to disk.

    for my $qfn (@qfns) { my $text; { open(my $fh, '<', $qfn) or die("Can't open file \"$qfn\": $!"\n); local $/; $text = <$fh_in>; } $text =~ s///; { open(my $fh, '>', $qfn) or die("Can't create file \"$qfn\": $!"\n); print($fh $text); } }

    can I do for multiple files simultaneously

    You'd need to spawn processes or threads for that, but there's really no point to process the files simultaneously. I have a feeling you meant something different than what you said.

Re: reading content from multiple files
by jwkrahn (Abbot) on Jan 24, 2010 at 00:46 UTC

    Something like this, for example (UNTESTED):

    my $dir = '/some/path/to/files'; local @ARGV = glob "$dir/*"; # get all files in $dir local $^I = '.bak'; # modify files "in-place" # non-empty string required for Windows while ( <> ) { # loop through all files s/regular expression/replacement text/g; # make modification print; # save the result }
Re: reading content from multiple files
by Anonymous Monk on Jan 23, 2010 at 22:07 UTC