#! perl -slw package dummy; use threads; use threads::shared; sub new{ my $self = bless do{ local *GLOB; \*GLOB }, $_[0]; share( %{ *$self } ); %{ *$self } = qw[ there are some parameters here 1 ]; $self; } sub get{ my $self = shift; @{ *$self }{ @_ || sort keys %{ *$self } } ; } sub put{ my $self = shift; lock %{ *$self }; ${ *$self }{ +shift } = shift while @_; } package main; use strict; use threads; use threads::shared; our $N ||= 10; sub t{ my $obj = shift; sleep 1; my $tid = threads->self->tid; warn "$tid: ", join'|', $obj->get(), $/; sleep rand 10; $obj->put( $tid, $tid ); warn "$tid: ", join'|', $obj->get(), $/; } my $obj = new dummy; print join '|', $obj->get; my @t = map{ threads->create( \&t, $obj ) } 1 .. $N; $_->join for @t; print join '|', $obj->get; __END__ c:\test>sglobjects.pl 1|parameters|are 1: 1|parameters|are| 2: 1|parameters|are| 3: 1|parameters|are| 3: 3|1|parameters|are| 4: 3|1|parameters|are| 5: 3|1|parameters|are| 6: 3|1|parameters|are| 7: 3|1|parameters|are| 8: 3|1|parameters|are| 9: 3|1|parameters|are| 10: 3|1|parameters|are| 1: 1|3|1|parameters|are| 7: 1|3|7|1|parameters|are| 4: 1|3|4|7|1|parameters|are| 9: 1|3|4|7|9|1|parameters|are| 2: 1|2|3|4|7|9|1|parameters|are| 5: 1|2|3|4|5|7|9|1|parameters|are| 6: 1|2|3|4|5|6|7|9|1|parameters|are| 10: 1|10|2|3|4|5|6|7|9|1|parameters|are| 8: 1|10|2|3|4|5|6|7|8|9|1|parameters|are| 1|10|2|3|4|5|6|7|8|9|1|parameters|are