my @conds; my $outer_conditional = qr/ ( #(??{$term}) (?: (?: && | \|\| | & | \| | \^ ) #(??{$term}) )+ ) (?{push(@conds, $^N), print " cond $^N\n"}) /x; while ($line =~ /$outer_conditional/g) { my $conds = join ", ",@conds; print "Conditionals: $conds\n"; }