Is this running at all for you? because I've identified a bunch of syntax errors, you might want to use use strict; and use warnings; in your code that will help you diagnosing and understanding
Here is what I've found:
- You have use APP::plugin where in package's definition you are not using the "APP::" namspace, also code references point to plugin
- Doing plugin->execute(...) will call execute method with "plugin" as the first parameter so fist line of execute subroutine should be my $class = shift;
- You missed word "sub" before execute
- When using threads you have to join them otherwise the program will NOT wait till the thread finishes execution
- You don't have anything on the shared hash so nothing will be printed unless you fill it with something like my %hsh :shared = ('mykey' => 'myvalue');
- Seems like you want to iterate over the hash's keys but you are iterating over both keys and values at same time, so you might want to change the foreach to foreach my $keys ( keys %abc)
- Your packages misses to provide a true value when loaded so you might want to add 1; as the last line of plugin package
If this is your first experience with Perl, I'd recommend you to start from basic stuff, since when you working with threads there is a high probability things screw up and you don't know where, bottom line is "..you have to learn to crawl before you learn to walk ..." (Aerosmith)
Usefull links:
- Object oriented tutorial
- Use strict and warnings
- keys function
Finally here is your code corrected
use strict;
use warnings;
use threads;
use threads::shared;
use APP::Plugin;
use Data::Dumper;
my %hsh : shared = ( 'a' => 1 );
my $thread = threads->create( \&subrt, %hsh );
$thread->join();
sub subrt {
my %args = @_;
print APP::Plugin->execute(%hsh);
}
#Code for Plugin module
package APP::Plugin;
use strict;
use warnings;
sub execute {
my $class = shift();
my %abc = @_;
foreach (keys %abc) {
print $_. "---" . $abc{$_}."\n";
}
}
1;
|