Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: recursive /eg fails

by derby (Abbot)
on Mar 27, 2002 at 13:03 UTC ( #154651=note: print w/ replies, xml ) Need Help??


in reply to recursive /eg fails

I0,

You have no base clase case for your recursion. When you get down to the bottom call, you try to execute "func xxx returns y". Try this (tip to stephen for cleaning it up):

#!/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); } }

-derby

update: There's a base case and a base class (no relation) but base clase?

update: Just spent a few minutes with your original. Here's it is with the base case added:

print doFunc( "MAIN", "B(1)+C(2)" ); sub doFunc{ my $theFunc = shift; local $_ = shift; my $re; $re = ${{ "B(1)+C(2)" => '1|2', }}{$_}||quotemeta; print "$theFunc: '$_'=~/$re/\n"; print join"\n",/(\w+)\(($re)\)/g,"\n"; if( $_ ne $re ) { $_ =~ s/(\w+)\(($re)\)/&doFunc($1,$2)/eg; # /ego works /eg fails } return "func $theFunc returns <$_>"; }


Comment on Re: recursive /eg fails
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://154651]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (14)
As of 2014-07-11 12:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (224 votes), past polls