### begin_: tryStuffAlpha.pm package tryStuffAlpha; use strict; use warnings; use Exporter; use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION); use vars qw( $PermaLink $OppositePermaLink ); $VERSION = 1.00; # Or higher @ISA = qw(Exporter); use tryStuffBeta; ### begin_: init vars $PermaLink = "PERMALINK-ALPHA\n"; $OppositePermaLink = "AOppositeLink=" .$tryStuffBeta::Permalink."\n"; ### begin_: subroutines push @EXPORT_OK, qw( SayHello ); sub SayHello { my $strOut; $strOut = "Alpha Says Hello World! \n"; return $strOut; }###end_sub push @EXPORT_OK, qw( SayOpposite ); sub SayOpposite { my $strOut; $strOut = "Say Opposite Alpha =".tryStuffBeta::SayHello(); return $strOut; }###end_sub ### begin_: end perl 1; __END__ #### ### begin_: tryStuffBeta.pm package tryStuffBeta; use strict; use warnings; use Exporter; use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION); use vars qw( $PermaLink $OppositePermaLink ); $VERSION = 1.00; # Or higher @ISA = qw(Exporter); use tryStuffAlpha; ### begin_: init vars $PermaLink = "PERMALINK-BETA\n"; $OppositePermaLink = "BOppositeLink=" .$tryStuffAlpha::Permalink."\n"; ### begin_: subroutines push @EXPORT_OK, qw( SayHello ); sub SayHello { my $strOut; $strOut = "Beta Says Hello World! \n"; return $strOut; }###end_sub push @EXPORT_OK, qw( SayOpposite ); sub SayOpposite { my $strOut; $strOut = "Say Opposite Beta =".tryStuffAlpha::SayHello(); return $strOut; }###end_sub ### begin_: end perl 1; __END__ #### ### begin_: tryStuff_Caller.pl use strict; use warnings; use tryStuffAlpha; ### use tryStuffBeta; ### ### begin_: main print "1: ". tryStuffAlpha::SayHello(); ### OK print "2: ". tryStuffBeta::SayHello(); ### OK print "3: ". tryStuffAlpha::SayOpposite(); ### OK print "4: ". tryStuffBeta::SayOpposite(); ### OK print "5: ". $tryStuffAlpha::PermaLink; ### OK print "6: ". $tryStuffBeta::PermaLink; ### OK print "7: ". $tryStuffAlpha::OppositePermaLink; ### FAILS print "8: ". $tryStuffBeta::OppositePermaLink; ### FAILS #### ### Run Result Alpha (tryStuffAlpha.pm run all by itself) Use of uninitialized value ... at tryStuffAlpha.pm line 29. Use of uninitialized value ... at tryStuffBeta.pm line 29. Subroutine SayHello redefined ... tryStuffAlpha.pm line 35. Subroutine SayOpposite redefined ... tryStuffAlpha.pm line 42. Use of uninitialized value ... tryStuffAlpha.pm line 29. ### Run Result Beta (tryStuffBeta.pm run all by itself) Use of uninitialized value ... at tryStuffBeta.pm line 29. Use of uninitialized value ... at tryStuffAlpha.pm line 29. Subroutine SayHello redefined ... tryStuffBeta.pm line 35. Subroutine SayOpposite redefined ... tryStuffBeta.pm line 42. Use of uninitialized value ... tryStuffBeta.pm line 29. ### Run Result Caller (tryStuff_Caller.pm run all by itself) Use of uninitialized value in concatenation (.) or string at tryStuffBeta.pm line 29. Use of uninitialized value in concatenation (.) or string at tryStuffAlpha.pm line 29. 1: Alpha Says Hello World! 2: Beta Says Hello World! 3: Say Opposite Alpha =Beta Says Hello World! 4: Say Opposite Beta =Alpha Says Hello World! 5: PERMALINK-ALPHA 6: PERMALINK-BETA 7: AOppositeLink= 8: BOppositeLink=