NOTE: In C++ there are cases where the calling code can "reach into" the function via the returned pointer or reference. This is appearantly not true of passed back scalars. Check out this code: $GlobalName = "Clinton"; sub getGlobalName     {     return($GlobalName);     } print "Before: " . &getGlobalName() . "\n"; $ref = \&getGlobalName(); $$ref = "Gore"; print "After: " . &getGlobalName() . "\n"; #All print statements printed "Clinton" I have been unable to hack into a subroutine via its scalar return. If you know of a way it can be done, please let me know, as this would be a horrid violation of encapsulation. #### $$ref = "Gore"; #### $ref = \&getGlobalName(); #### $GlobalName = "Clinton"; sub getGlobalName { return($GlobalName); } print "Before: " . &getGlobalName() . "\n"; $ref = \&getGlobalName(); print '>>', $$ref, "\n"; # Added $$ref = "Gore"; print '>>', $$ref, "\n"; # Added print "After: " . &getGlobalName() . "\n"; # Produces the output Before: Clinton >>Clinton >>Gore After: Clinton #### $GlobalName = "Clinton"; sub getGlobalName { return($GlobalName); } sub getRefToGlobalName { return \$GlobalName; } print "Before: " . getGlobalName() . "\n"; $ref = getRefToGlobalName(); $$ref = "Gore"; print "After: " . getGlobalName() . "\n"; #prints Before: Clinton After: Gore #### $GlobalName = "Clinton"; sub getRefToGlobalName { return \$GlobalName; } print "Before: " . ${ getRefToGlobalName() } . "\n"; $ref = getRefToGlobalName(); $$ref = "Gore"; print "After: " . ${ getRefToGlobalName() } . "\n"; # Also prints Before: Clinton After: Gore #### $GlobalName = "Clinton"; sub getRefToGlobalName { return \$GlobalName; } $ref = getRefToGlobalName(); print "Before: " . $$ref . "\n"; $$ref = "Gore"; print "After: " . $$ref . "\n"; # Also prints Before: Clinton After: Gore