$ diff ex1.pl ex2.pl 2a3 > use MCE::Shared; 4c5 < my $string = "First value"; --- > tie my $string, "MCE::Shared", "First value"; #### use strict; use warnings; use MCE::Shared; my $string = MCE::Shared->scalar("First value"); sub do_subroutine { print "I am the subroutine and my PID is $$\n"; $string->set("Second value"); } print "I am the invoking process and my PID is $$\n"; print "The value of \$string is ", $string->get(), "\n"; unless (fork) { do_subroutine (); exit; } my $waited_pid = wait; print "The PID of the child upon whom I waited was $waited_pid\n"; print "The value of \$string is ", $string->get(), "\n"; __END__ I am the invoking process and my PID is 22725 The value of $string is First value I am the subroutine and my PID is 22727 The PID of the child upon whom I waited was 22727 The value of $string is Second value #### use strict; use warnings; use MCE::Shared; package My::String; sub new { my ($class, $string) = @_; return bless \$string, $class; } sub set { my ($self) = @_; $$self = $_[1]; return 1; } sub get { my ($self) = @_; return $$self; } package main; my $string = MCE::Shared->share( { module => "My::String" }, "First value" ); sub do_subroutine { print "I am the subroutine and my PID is $$\n"; $string->set("Second value"); } print "I am the invoking process and my PID is $$\n"; print "The value of \$string is ", $string->get(), "\n"; unless (fork) { do_subroutine (); exit; } my $waited_pid = wait; print "The PID of the child upon whom I waited was $waited_pid\n"; print "The value of \$string is ", $string->get(), "\n"; __END__ I am the invoking process and my PID is 22978 The value of $string is First value I am the subroutine and my PID is 22980 The PID of the child upon whom I waited was 22980 The value of $string is Second value #### use strict; use warnings; use MCE::Shared; package My::String; sub new { my ($class) = @_; my $string = MCE::Shared->scalar($_[1]); return bless [ $string ], $class; } sub set { my ($self) = @_; $self->[0]->set($_[1]); return 1; } sub get { my ($self) = @_; return $self->[0]->get(); } package main; my $string = My::String->new("First value"); sub do_subroutine { print "I am the subroutine and my PID is $$\n"; $string->set("Second value"); } print "I am the invoking process and my PID is $$\n"; print "The value of \$string is ", $string->get(), "\n"; unless (fork) { do_subroutine (); exit; } my $waited_pid = wait; print "The PID of the child upon whom I waited was $waited_pid\n"; print "The value of \$string is ", $string->get(), "\n"; __END__ I am the invoking process and my PID is 23089 The value of $string is First value I am the subroutine and my PID is 23091 The PID of the child upon whom I waited was 23091 The value of $string is Second value