#!/usr/bin/perl use 5.008; use strict; use warnings; use threads; use threads::shared; use Data::Dumper; my %p1 :shared; my %p2 :shared; %p1 = (path => shift); %p2 = (path => shift); my @t; push @t, threads->create(\&get_md5sums, \%p1); push @t, threads->create(\&get_md5sums, \%p2); $t[0]->join; $t[1]->join; print Dumper \%p1, \%p2; sub doit_local { local $_ = shift; s/'/'\''/g; return $_; } sub doit_my { my $x = shift; $x =~ s/'/'\''/g; return $x; } sub get_md5sums { my $x = shift; print Dumper [$x, $$x{path}]; $$x{foo} = join " ", map '"'.doit_local($_).'"', 'find', $$x{path}, qw/-type f -exec md5sum {} ;/; return 1; }