Thread globale $vars in Thread bearbeiten (2 answers)
Opened by pearl-man at 2006-05-22 14:13

pearl-man
 2006-05-22 14:13
#66408 #66408
User since
2005-07-25
65 Artikel
BenutzerIn
[default_avatar]
Tach(h),

hab n Problem, wenn ich im Main-Part ne Variable festleget mit strict vars:

Code: (dl )
1
2
3
4
5
6
#!/usr/bin/perl -w

use strict;
use Thread;

my $var = 10;


und mit detach() nen Thread starte, welcher diese Variable $var verändert, also:

Code: (dl )
1
2
3
4
5
6
7
8
9
my $t = new Thread \&mach_was;
$t->detach();

sub mach_was
{
foreach (1 .. 5){
$var--;
}
}


so wird die Variable $var einfach nicht verändert, sie entspricht also bei späterer Ausgabe mit z.B.:

Code: (dl )
1
2
3
4
sleep(10);
print "For now the var looks like: $var";

exit(0);


nicht dem erwartetem Ergebniss von 5 sondern es wird nach wie vor die Zahl 10 ausgegeben. Leserechte besitzt die sub 'mach_was' des Threads $t jedoch bezüglich von $var, doch scheinbar keine globalen Schreibrechte.

habs auch schon mit Package-Variablen versucht, also:

Code: (dl )
my $var = 10;


durch

Code: (dl )
$main::var = 10;


ersetzt und die Variable $var jeweils mit $main::var verwendet, doch ohne Erfolg.
Jemand n Tipp?

View full thread globale $vars in Thread bearbeiten