in reply to Re: Is modifying the symbol table to redefine subroutines evil?
in thread Is modifying the symbol table to redefine subroutines evil?

I object to that "easier" approach because it confuses the intent of the code; data which should be hidden from the rest of the program is revealed when you use global state this way.
A function is a piece of code lumped together to serve some purpose; the function name represents this purpose in your code. I've been influenced heavily by functional programming, but I think that programs are the most readable when functions "do the same thing" with respect to the rest of the program each time they are called; that way, when reading code you don't have to maintain a lot of state in your head to predict behavior.
There are two possibilities for the "evil" code:

Update: Re^3: Is modifying the symbol table to redefine subroutines evil? suggests using a lexical closure. That seems fine to me too, I just don't like the globals much.
~dewey
  • Comment on Re^2: Is modifying the symbol table to redefine subroutines evil?

Replies are listed 'Best First'.
Re^3: Is modifying the symbol table to redefine subroutines evil?
by perrin (Chancellor) on Apr 11, 2007 at 23:17 UTC
    Here it is without globals:
    { my $foo_has_been_called; sub foo { if (not $foo_has_been_called) { call_me_only_once(); $foo_has_been_called = 1; } } }