Module of the day: File::Inplace
The task was simple enough: edit a already existing file, to change something, keeping the name intact, and if possible doing a backup of the original version.
We could start dealing with all sorts of errors in open, rename and friends, dealing with temporary files and all that stuff.
Or we could just jump to CPAN:
cpan File::Inplace
perldoc File::Inplace
In my case, I wanted to remove a line from a file. A regexp matching the line in question was something like this:
qr/src="trivantis-titlemgr.js"/
So the code becomes:
my $editor = File::Inplace->new(file => catfile($path, 'titlemgr.html'), suffix => '-'.time().'.bak' );
while (my ($line) = $editor->next_line) {
$editor->replace_line(undef) if $line =~ qr/src="trivantis-titlemgr.js"/;
}
$editor->commit;
Nice and sweet.
'update:' to clarify some point raised in the comments, yes I know about perl -i.bak
, but I needed this inside a Catalyst web application, and thus this module.