in reply to Refactoring a module with many anonymous subrefs as an OO module

I don't know how converting the anonymous subroutines to named subroutines will improve the situation as you haven't told us why you need names. Iterating over unnamed things is usually easier than generating names. Still, it's fairly easy to give names to the subroutines:

for my $primary (sort keys %CODEREFS) { for my $secondary (sort keys %{ $CODEREFS{$primary}}) { my $code = $CODEREFS{$primary}->{$secondary}->{cref}; no strict 'refs'; *{"mymodule_${primary}_${secondary}"} = $code; }; };

If you plan on calling the subroutines via the -> method syntax, be aware that the parameters might change, because $foo->mymodule_1_1() is equivalent to mymodule_1_1($foo);.

Replies are listed 'Best First'.
Re^2: Refactoring a module with many anonymous subrefs as an OO module
by telcontar (Beadle) on Nov 21, 2007 at 12:40 UTC
    I don't need names, but I do need the object's data inside the anonymous subs. And its my understanding that to do that with anonymous subs, I need to pass the object along, on every invocation of the sub. Can't use direct object invocation with anonymous subs, and, well, that just seemed rather, err, unelegant.