first of all variables that will be shared between threads needs to be shared so hash transaction_hash needs to be declared as well as shared. Second you need to pass the %transaction hash as a reference into %hsh with the \ prefix. Look at the following code
#!/usr/bin/perl -w use strict; use warnings; use threads; use threads::shared; use Data::Dumper; my %hsh : shared; my %transaction_hash :shared = ( 'another_k' => 'another_v'); $hsh{inner_hash} = \%transaction_hash; # referencing my $thread = threads->create( \&subrt, %hsh ); $thread->join(); sub subrt { my %args = @_; print Plugin->execute(%hsh); } #Code for Plugin module package Plugin; sub execute { my $class = shift(); my %abc = @_; my %shsh = %{$abc{inner_hash}}; #dereferencing foreach (keys %shsh) { print $_. "---" . $shsh{$_}."\n"; } }
In reply to Re^4: Not geting Shared variable of parent process into the thread
by bluescreen
in thread Not geting Shared variable of parent process into the thread
by avanta
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |