Yes, Text::Balanced will work (and it is a core module since 5.7.3).
Code:
#!/usr/bin/env perl
use strict;
use warnings;
use Text::Balanced qw/
extract_multiple
extract_quotelike
/;
my @data = (
q{50 0 "R0 G255 B0 A255" "Solid" 118 1 "R0 G0 B0 A255" "R0 G0 B0 A255"
+ 0},
q{70 0 "R0 G255 B255 A255" "Solid" 118 1 "R12 G12 B12 A255" "R12 G12 B
+12 A255" 0},
);
my @extracted;
foreach my $str (@data) {
@extracted =
extract_multiple( $str, [ \&extract_quotelike, ], );
print q{Input: }, $str, qq{\n};
print q{Output: }, qq{\n};
print qq{\t};
print join qq{\n\t},
grep { !(m/^\s*$/) and length $_ > 0 } @extracted;
print qq{\n};
}
Output:
Input: 50 0 "R0 G255 B0 A255" "Solid" 118 1 "R0 G0 B0 A255" "R0 G0 B0
+ A255" 0
Output:
50 0
"R0 G255 B0 A255"
"Solid"
118 1
"R0 G0 B0 A255"
"R0 G0 B0 A255"
0
Input: 70 0 "R0 G255 B255 A255" "Solid" 118 1 "R12 G12 B12 A255" "R12
+ G12 B12 A255" 0
Output:
70 0
"R0 G255 B255 A255"
"Solid"
118 1
"R12 G12 B12 A255"
"R12 G12 B12 A255"
0
Hope that helps. |