Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12107[/thread]

Starten einer Subroutinen mit Parameter aus einer Variable

Leser: 1


<< >> 2 Einträge, 1 Seite
Hagen
 2008-06-30 13:57
#111685 #111685
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
Hallo,

folgendes Konstrukt funktioniert bei mir Problemlos:
Code (perl): (dl )
1
2
3
my $ch = lc(substr($data->{'titel'}, $data->{'underline'}, 1));
my $start_sub = $data->{'key'}.'_main';
$mw->bind('<'.$ch.'>', sub { \{&$start_sub}; } );


In $ch steht z.B. t und in start_sub steht PopUp_main; d.h. wenn t gedrückt wird, wird die Subroutinen PopUp_main gestartet.

Jetzt möchte ich aber an die Subroutinen PopUp_main noch einen Parameter übergeben. Ein Versuch war
Code (perl): (dl )
my $start_sub = $data->{'key'}.'_main($mw)';

oder
Code (perl): (dl )
my $start_sub = $data->{'key'}."_main($mw)";


Leider hat beides nicht funktioniert. Beim erste erhalte ich die Rückmeldung:
Code: (dl )
Tk::Error: Can't use string ("PopUp_main($mw)") as a subroutine ref while "strict refs" in use

beim zweiten
Code: (dl )
Tk::Error: Can't use string ("PopUp_main(MainWindow=HASH(0x4") as a subroutine ref while "strict refs" 


Wenn ich das richtig erkenne, wird mein Parameter noch als Name der Subroutinen genutzt.

Hat irgendwer vielleicht eine Idee, wie ich den Parameter richtig angeben kann?
Gruß
Hagen
moritz
 2008-06-30 14:13
#111686 #111686
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Soweit ich weiss bietet Tk dafür eine eigene Syntax, wenn ich mich richtig erinnere mit Array-References:

Code (perl): (dl )
$mw->bind($event, [$subname, $arguments]);


Ansonsten kannst du immer noch mit Closures Currying nachbauen, im einfachsten Fall kannst du das so machen:

Code (perl): (dl )
1
2
3
4
my $arg = 3;
my $subref_with_args = sub {
    call_other_sub($arg, @_);
}
<< >> 2 Einträge, 1 Seite



View all threads created 2008-06-30 13:57.