use strict; use warnings; package Alpha; our $language = "US-English"; $Alpha::first = "Alpha"; sub SayHello {"hello from package Alpha\n"}; sub SayBye {"Goodbye.\n"} sub GreetByName {"Well Hello $_[0].\n";} package Bravo; our $AUTOLOAD; sub AUTOLOAD { $AUTOLOAD =~ s/^.+:://; # strip package name *sym = $Alpha::{$AUTOLOAD}; *sym{CODE}->(@_); } $Bravo::first = "Bravo"; sub SayHello {"hello from package Bravo\n"}; package main; ### begin_: get stuff from A print("$Alpha::first\n"); print Alpha::SayHello(); print("$language\n"); print Alpha::SayBye(); # -> Goodbye. print Alpha::GreetByName('Dolly'); # -> Well Hello Dolly. print "\n---------------------\n"; ### begin_: get stuff from Bravo print("$Bravo::first\n"); print Bravo::SayHello(); print("$language\n"); print Bravo::SayBye(); # -> Goodbye. print Bravo::GreetByName('Billy'); # -> Well Hello Billy. print "\n---------------------\n";