Thread textvariable: Verweis auf Arrayelement klemmt (4 answers)
Opened by FIFO at 2006-11-08 17:52

renee
 2006-11-08 20:45
#45921 #45921
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das erste funktioniert nicht, weil der Wert im Speicher nicht geändert wird, sondern die Elemente von @data verweisen einfach auf einen anderen Speicherbereich. Die Labels warten aber auf Änderungen im Speicher.

Vielleicht verdeutlicht folgendes das Phänomen etwas:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use warnings;
use strict;
use Tk;

my @data = qw(null eins zwei drei);
my @data_2 = qw(nil one two three);

my @display;

my $mw = MainWindow->new;

for my $i (1..3) {
push @display, $mw->Label(
-textvariable=>\$data[$i],
) ->pack;
}

my $toggle_button = $mw->Button(
-text=>"English!",
-command=>sub{print \$data[1]; @data = @data_2; print \$data[1];},
)->pack;

MainLoop;


Ausgabe:
Code: (dl )
SCALAR(0x224fb8)SCALAR(0x2ba8064)



vs.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use warnings;
use strict;
use Tk;

my @data = qw(null eins zwei drei);
my @data_2 = qw(nil one two three);

my @display;

my $mw = MainWindow->new;

for my $i (1..3) {
push @display, $mw->Label(
-textvariable=>\$data[$i],
) ->pack;
}

my $toggle_button = $mw->Button(
-text=>"English!",
-command=>sub{print \$data[1]; for(0..scalar(@data) -1){$data[$_] = $data_2[$_]}; print \$data[1];},
)->pack;

MainLoop;


Ausgabe:
Code: (dl )
SCALAR(0x224fb8)SCALAR(0x224fb8)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread textvariable: Verweis auf Arrayelement klemmt