#!/usr/bin/perl -wd use strict; print doFunc( "MAIN", "B(1)+C(2)" ); sub doFunc{ my ($theFunc, $rem) = @_; my $re = &get_re($rem); if( $rem ne $re ) { $rem =~ s/(\w+)\(($re)\)/doFunc($1,$2)/eg; } return "func $theFunc rets $rem"; } ## ## When we're called with the initial ## state, return "1|2". Otherwise, return ## our input, quotemeta'd. ## sub get_re { my ($in) = @_; if ($in eq "B(1)+C(2)") { return '1|2'; } else { return quotemeta($in); } }