FWIW, a single-regex solution:
c:\@Work\Perl\monks>perl -wMstrict -le
"use Test::More 'no_plan';
use Test::NoWarnings;
;;
my @vectors = (
[ 'ABC;123;;;;;HELLO;' =>
q{ABC;'123';'';'';'';'';'HELLO';}
],
[ 'DEF;345;;BANANA;12DEF;44,55;4*12;;;;;;;;3;' =>
q{DEF;'345';'';'BANANA';'12DEF';'44,55';'4*12';'';'';'';'';'';'';
+'';'3';}
],
);
;;
for my $ar_vector (@vectors) {
my ($string, $expected) = @$ar_vector;
(my $got = $string) =~ s{ (?<= ;) ([^;]*) (?= ;) }{'$1'}xmsg;
is $got, $expected, qq{'$string' -> \n >$expected<};
}
"
ok 1 - 'ABC;123;;;;;HELLO;' ->
# >ABC;'123';'';'';'';'';'HELLO';<
ok 2 - 'DEF;345;;BANANA;12DEF;44,55;4*12;;;;;;;;3;' ->
# >DEF;'345';'';'BANANA';'12DEF';'44,55';'4*12';'';'';'';'';'';'';'';
+'3';<
ok 3 - no warnings
1..3
Notes:
-
Run under Win7, Perl version 5.8.9.
-
Single-quotes were used in the example code instead of doubles because Windoze command-line escaping would have made the cut-paste unreadable. Substitute double-quotes for single-quotes in the replacement of the substitution to address original problem.
-
The /r modifier for a s/// substitution added with Perl version 5.14 makes the code slightly simpler (tested):
my $got = $string =~ s{ (?<= ;) ([^;]*) (?= ;) }{'$1'}xmsgr;
(See s/// in perlop.)
Update: The regex used above has also been tested and works not only with "pure" strings (i.e., with nothing after the final semicolon), but with test strings ending in a newline after the final semicolon, as would be presumed to be the case for strings read from a file.
Give a man a fish: <%-{-{-{-<
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.