#!/usr/bin/perl -w package MP3; use Plugin; use strict; # get a plugin object so we can access its methods # we could pass config details to the plugin object # here if we want..... my $p = new Plugin( config_var => 'some config var' ); # use closures to make truly private lexical vars that # can only be accessed by the get and set methods { my $var1; sub set_var1 { $var1 = $_[0] } sub get_var1 { return $var1 } } { my $var2; sub set_var2 { $var2 = $_[0] } sub get_var2 { return $var2 } } { my $var3; sub set_var3 { $var3 = $_[0] } sub get_var3 { return $var3 } } sub say_gday { print "G'day World!\n" } set_var1(123456); print 'Get \$var1 ', get_var1(), "\n"; print "\$var1 is very private '$var1'\n"; # now call some of the Plugin functions.... $p->func1(); # sets $var1 to 123 and prints it... $p->func2(); # calls a function in MP3 package print $p->func3(); # return a config var package Plugin; sub new { my ($class, @init) = @_; return bless {@init}, $class; } sub func1 { MP3::set_var1(123); print MP3::get_var1(), "\n"; } sub func2 { MP3::say_gday(); } sub func3 { my $self = shift; return $self->{config_var}; } 1;