Thread Kann im Tk-bind Callback keine Variablen per eval "erstellen"
(2 answers)
Opened by FoolAck at 2008-11-21 23:10
Moin, ich hab mir folgendes kleines Tk eval Script geschrieben, aber ich kann irgendwie keine neuen Variablen erstellen:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #!/usr/bin/env perl use strict; use warnings; use Data::Dumper; use Tk; local $Data::Dumper::Indent = 0; my $mw = MainWindow->new(-title => "Tk / Eval"); my $expr = ''; my $input = $mw->Entry(-width => 50, -textvariable => \$expr); my $output = $mw->Listbox(-width => 50, -height => 15); my $data = { mw => $mw, input => $input, output => $output, expr => \$expr, }; $input->bind('<Return>', [\&evalCode, $data]); MainLoop(); sub evalCode { my (undef, $data) = @_; my $retval = eval ${$data->{expr}}; ${$data->{expr}} = ''; my $dumped = Dumper $retval; $dumped =~ s/^\$VAR\d+ = //; $data->{output}->insert("end", $dumped); return; } Wenn ich nun etwas wie '@foo = qw/a b c/' oder ähnliches eingebe, was eine (globale) Variable ins Leben rufen würde, gibt eval immer undef zurück. Die Zuweisung funktioniert also nicht. Sie funktioniert allerdings, wenn ich irgendwo am Anfang des Scripts ein paar dummy Variablen mit my deklariere. Wenn ich zum Beispiel in Zeile 13 'my @foo' hinzufüge, funktioniert es. (Dann natürlich nur für @foo) Seltsam schmeltsam, kann Jemand sehen was ich hier falsch mache? Ich komm nicht drauf. Das hier funktioniert komischerweise: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 use Data::Dumper; use Tk; my $mw = MainWindow->new()->bind('<Return>', [\&foo]); MainLoop(); sub foo { my $retval = eval '%h = (foo => q{bar}); \%h'; print Dumper $retval; } Das hier funktioniert ebenfalls: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 use Data::Dumper; use Tk; my $foo = '%h = (foo => q{bar}); \%h'; my $mw = MainWindow->new()->bind('<Return>', [\&foo, $foo]); MainLoop(); sub foo { my (undef, $foo) = @_; my $retval = eval $foo; print Dumper $retval; } Suggestions? |