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";
}
}
|