In article <[EMAIL PROTECTED],
[EMAIL PROTECTED] (Chris McMahon) writes:
>
>Hello...=20
> I need to add some boilerplate text to the very top of about
>17,000 files. I can get to the files easily enough (File::Find), but
>there's a special syntax to edit a file in place, and it's not specified
>in Programming Perl, and it's a tough search on Google and PerlMonks. =20
> Could anyone on the list supply a link or a fast overview of
>editing files in place? I think I need to use the "-i" flag, but I'm
>not sure I know what I'm doing...
If you want to activate the -i flag from inside a program, the
instructions for doing that are somewhat rarer. Basically, you
set $^I to the value you'd give to the -i flag, and then whatever
you print while looping over <> replaces your files. Here's one
way to do what you want to do:
use File::Find;
# Make sure @ARGV is empty at this point
find(\&finder, @starting_directories);
$^I = '.bak';
{
local $/; # So we get a whole file at a time
while (<>) {
print $BOILERPLATE, $_;
}
}
sub finder {
if (I_want_this_file) { push @ARGV, $File::Find::name }
}
Yes, you can do it without either populating the whole array
before processing any of the files, or without reading the
whole contents of each file in at once; I just wanted to
keep this as simple as possible.
--
Peter Scott
http://www.perldebugged.com/
*** NEW *** http://www.perlmedic.com/
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>