#!/usr/bin/perl -w
use strict;
use Regexp::Common;
my $re = qr{ \( (?: (?> [^()]+ ) | (??{ $re }))* \) }x;
my $input = "aa bb cc (dd ee (ff gg (hh) jj) kk)";
print "With module\n";
while ($input =~ m/(\w+|$RE{balanced}{-parens=>'()'})\s*/g) {
print "$1\n";
}
print "With recursive RegExp\n";
while ($input =~ m/(\w+|$re)\s*/g) {
print "$1\n";
}
__END__
# output:
With module
aa
bb
cc
(dd ee (ff gg (hh) jj) kk)
With recursive RegExp
aa
bb
cc
dd
ee
ff
gg
(hh)
jj
kk
####
my $re = qr{ \( (?: (?> [^()]+ ) | (??{ $re }))* \) }x;
##
##
no strict 'vars';
$rec_re = qr{ \( (?: (?> [^()]+ ) | (??{ $rec_re }))* \) }x;
my $re = $rec_re;
use strict;