The example I posted is simplified - perhaps too much.
I really want repetition, not recursion, but ran into roadblock with perl behaviour of only returning the last matches. Here is what I first tried, it only returns the last coordinate pair, which is documented behaviour.
#!/usr/bin/env perl
use v5.16;
use strict;
my $prBoundaryString = <<endPrBoundary;
'( (0.01 0.02) (0.0 1328.23) (0.03 0.04) )
endPrBoundary
say "prBoundaryString=$prBoundaryString";
my ($coord,$coords);
$coord = qr{
\(\s*
(?<x>[\-\.0-9]+)\s+
(?<y>[\-\.0-9]+)\s*
\)\s*
}x;
$coords = qr{
(
( $coord )+
)
}x;
$prBoundaryString =~ m{
\'\(\s*\s*
$coords
\)\s*$
}x || die "parsePrBoundary: Error parsing prBoundary";
say "-x0=$-{x}[0]";
say "-y0=$-{y}[0]";
say "-x1=$-{x}[1]";
say "-y1=$-{y}[1]";
say "-x2=$-{x}[2]";
say "-y2=$-{y}[2]";
output: - it only gets the last coordinate.
prBoundaryString='( (0.01 0.02) (0.0 1328.23) (0.03 0.04) )
-x0=0.03
-y0=0.04
-x1=
-y1=
-x2=
-y2=
|