Study the following short program and its output:
use strict;
sub Foo::bar {
print 'called on line ', (caller)[2], ": $_[0]\n" and $_[0];
}
my $frobozz = bless \&Foo::bar, 'Foo';
$frobozz->bar('eenie');
$frobozz->bar('eenie')->('meenie');
$frobozz->('eenie');
Foo->bar('eenie');
Foo->bar('eenie')->bar('meenie');
Foo::bar('eenie');
'Foo'->bar('eenie');
'Foo::bar'->('eenie');
"Foo'bar"->('eenie'); # Perl trivia
# bar('eenie'); # bombs!
require Exporter;
@Foo::ISA = ('Exporter');
@Foo::EXPORT_OK = ('bar');
Foo->import('bar');
bar('eenie');
__END__
Make sure you understand why each output line is generated (except the one corresponding to the code line marked as "Perl trivia"--that one's optional), and why un-commenting out the line that begins with
# bar causes a run-time error. If, after you work through it, something still doesn't make sense, ask.
Note! The above is certainly not an example of good coding. Its only purpose is to illustrate some aspects of Perl.