From 46841d08dc662113df30cf49e072b0ba04d4d9aa Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Fri, 20 Nov 2009 01:01:26 +0100 Subject: [PATCH] fileset: array replace --- lib/File/Rewrite.pm | 17 ++++++++++++++--- t/10-fileset.t | 8 ++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/lib/File/Rewrite.pm b/lib/File/Rewrite.pm index 5a30a32..784542d 100644 --- a/lib/File/Rewrite.pm +++ b/lib/File/Rewrite.pm @@ -19,7 +19,16 @@ sub fileset { while (readline $src) { chomp; if ($_ =~ (ref $search ? $search : qr/^\Q$search\E$/)) { - if (defined $replace and $_ eq $replace) { + 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 +40,10 @@ sub fileset { } close $src; if (defined $replace) { - $changes++; - print {$dest} $replace, $/; + for (ref $replace eq 'ARRAY' ? @$replace : $replace) { + $changes++; + print {$dest} $_, $/; + } } close $dest; diff --git a/t/10-fileset.t b/t/10-fileset.t index dc800ef..db1575e 100644 --- a/t/10-fileset.t +++ b/t/10-fileset.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 13; +use Test::More tests => 16; use Test::NoWarnings; use autodie; @@ -57,5 +57,9 @@ testfileset('replace string', "1$/2$/3$/", [4, 1], 2, "2$/3$/4$/"); testfileset('replace all', $BASICBODY, ['', qr/^re/], 3, "noremove$/.$/$/"); testfileset('keep first', "foo$/bar$/foo$/", ['foo'], 1, "foo$/bar$/"); -is(remove_tree($target), 11, 'no unexpected files'); +testfileset('add new array', ".$/", [['foo','.'], ''], 2, ".$/foo$/.$/"); +testfileset('replace by array', "$/foo$/.$/", [['foo',''], ''], 3, "foo$/.$/foo$/$/"); +testfileset('partial add', "foo$/$/", [['foo','.'], 'foo'], 1, "foo$/$/.$/"); + +is(remove_tree($target), 14, 'no unexpected files'); -- 2.30.0