http://qs1969.pair.com?node_id=588424


in reply to Re: A graphical regular expression tester.
in thread A graphical regular expression tester.

Weird, your example tested fine until I clicked one of the switches, then got a similar error to you. However, I noticed the error didn't occur when clicking the checkbox for 'g'. The way subroutine call for this event is handled differently, so I swapped the following....
< $check_switch_i->bind('<Button-1>', \&button_run('now')); < $check_switch_m->bind('<Button-1>', \&button_run('now')); < $check_switch_s->bind('<Button-1>', \&button_run('now')); > $check_switch_i->bind('<Button-1>', sub { button_run('now') }); > $check_switch_m->bind('<Button-1>', sub { button_run('now') }); > $check_switch_s->bind('<Button-1>', sub { button_run('now') });
...and the bug has gone. I've no idea why though. Anyone?

Cheers, Rob

---
my name's not Keith, and I'm not reasonable.

Replies are listed 'Best First'.
Re^3: A graphical regular expression tester.
by liverpole (Monsignor) on Dec 07, 2006 at 19:00 UTC
    Hi reasonablekeith,

    Yes, it's because you're not doing what you think you're doing with:

    $check_switch_i->bind('<Button-1>', \&button_run('now'));

    If you run perl -MO=Deparse on that, it'll show you:

    $check_switch_i->bind('<Button-1>', \(&button_run('now')));

    Which means that you're calling bind with a reference to the results of a call to the subroutine button_run.

    What you want, instead (if you're going to use that style of notation), is the anonymous list syntax:

    $check_switch_i->bind('<Button-1>', [ \&button_run, 'now' ]);

    s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/