At 14:50 +0200 7/30/03, Stas Bekman wrote:
if I 'use threads::shared', share() works as documented:
perl-5.8.1-ithread -le 'use threads; use threads::shared; my $x; share($x); $x = 1;'
perl-5.8.1-ithread -le 'use threads; use threads::shared; my $x; threads::shared::share($x); $x = 1;'
However if I 'require threads::shared', it doesn't work the same way:
perl-5.8.1-ithread -le 'use threads; require threads::shared; my $x; threads::shared::share($x); $x = 1;'
Argument to share needs to be passed as ref at -e line 1.
If I pass \$x it works.
If I explicitly import share it doesn't.
perl-5.8.1-ithread -le 'use threads; require threads::shared; threads::shared->import(qw(share)); my $x; share($x); $x = 1;'
Argument to share needs to be passed as ref at -e line 1.
why?
Maybe you're getting the dummy share sub somehow?
from threads::shared.pm
BEGIN { if ($threads::threads) { : yadayadayada *cond_wait = \&cond_wait_enabled; *cond_signal = \&cond_signal_enabled; *cond_broadcast = \&cond_broadcast_enabled; require XSLoader; XSLoader::load('threads::shared',$VERSION); push @EXPORT,'bless'; } else { *share = \&share_disabled; *cond_wait = \&cond_wait_disabled; *cond_signal = \&cond_signal_disabled; *cond_broadcast = \&cond_broadcast_disabled; } }
: yadayadayada sub share_disabled ([EMAIL PROTECTED]) { return $_[0] }
Let's test it:
perl-5.8.1-ithread -le 'require threads; print $threads::threads; require threads::shared; print join "\n", \&threads::shared::share, \&threads::shared::share_disabled;'
1
CODE(0x80f12e8)
CODE(0x80f1384)
There are not the same. I didn't figure out yet why, but if I move the require parts into a BEGIN {} block everything works OK:
perl-5.8.1-ithread -le 'BEGIN {require threads; require threads::shared;}; $x; threads::shared::share($x);'
But I can't have them in the BEGIN block, I need to conditionally load them at run time. Does this ring any bells?
__________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com