X-Git-Url: http://git.shiar.nl/perl/file-rewrite.git/blobdiff_plain/6ad6da685e4d484f4937dfd8784195cbf6d3470f..95dfe50f34f7a41b5660288e9160717c59c38c86:/lib/File/Rewrite.pm diff --git a/lib/File/Rewrite.pm b/lib/File/Rewrite.pm index 5a30a32..7319259 100644 --- a/lib/File/Rewrite.pm +++ b/lib/File/Rewrite.pm @@ -6,20 +6,36 @@ use warnings; use autodie ':all'; use Exporter 'import'; +our $VERSION = '1.00'; our @EXPORT_OK = qw(fileset); sub fileset { - my ($filename, $replace, $search) = @_; - $search = $replace if not defined $search; + my ($filename, $search, $replace) = @_; my $tmpname = "$filename.$$.tmp"; my $changes = 0; + $replace = $search if @_ < 3; + + # generate a single regex to emulate smart match + $search = [$search] unless ref $search eq 'ARRAY'; + @$search = grep { defined } @$search; + $search = @$search ? join('|', map { ref $_ ? $_ : "^\Q$_\E\$" } @$search) : undef; + open my $src, '<', $filename; open my $dest, '>', $tmpname; while (readline $src) { chomp; - if ($_ =~ (ref $search ? $search : qr/^\Q$search\E$/)) { - if (defined $replace and $_ eq $replace) { + if (defined $search and $_ =~ /$search/s) { + if (ref $replace eq 'ARRAY') { + if (@$replace and $_ eq $replace->[0]) { + shift @$replace; + } + else { + $changes++; + next; + } + } + elsif (defined $replace and $_ eq $replace) { undef $replace; } else { @@ -31,8 +47,10 @@ sub fileset { } close $src; if (defined $replace) { - $changes++; - print {$dest} $replace, $/; + for (ref $replace eq 'ARRAY' ? @$replace : $replace) { + $changes++; + print {$dest} $_, $/; + } } close $dest; @@ -49,12 +67,12 @@ sub fileset { =head1 NAME -File::Rewrite +File::Rewrite - Append and/or strip lines from text files =head1 SYNOPSIS use File::Rewrite 'fileset'; - fileset('/tmp/somefile', undef, qr/match/); + fileset('/tmp/somefile', qr/match/ => undef); =head1 DESCRIPTION