in reply to Re^4: Global vs. local?
in thread Global vs. local?

sub Button1_Click { # ...do something... }

Huh? That's definitely a valid subroutine proper, as opposed to sub 1Button_Click {} right? If the old model uses typeglobs but can resolve weird names, then there's messy-symbol-table-lookup and reference-taking-from-typeglobs going on under the hood without need (since sub references could be used as callbacks in the first place.) Not the kind of code I'd consider sane.

OTOH, if such weird lookup doesn't tale place, then your of of luck with subs constructed as the OP did, since illegal typeglobs aint for subroutine dispatch, only for internal variables.

Replies are listed 'Best First'.
Re^6: Global vs. local?
by Corion (Patriarch) on May 29, 2009 at 17:52 UTC

    While the name is weird, if you're using a variable to hold it, you can perfectly call the subroutine through that name. And using weird names is good for named subroutines that get autogenerated by code:

    my $subname = '1Button_Click'; *{$subname} = sub { print "Hello World\n"; }; no strict 'refs'; $subname->();
      And using weird names is good for named subroutines that get autogenerated by code

      The question is wether it is good to name subroutines autogenerated by code in the symbol table. With a dispatch table hash you can name your subroutines by chunks of jpeg files, nice. But symbol tables are namespaces and their entries good for importing/exporting/localizing. I'd rather expect programmers to adhere to perl principles here.

      Q: Why do you do that?
      A: Because I can!