http://www.perlmonks.org?node_id=980893

anazawa has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks, I'm working on the following situation:
# Foo.pm package Foo; use strict; use warnings; use Bar; sub foo { warn 'Foo::foo was called' } Bar->bar; 1;
A package Foo calls Bar's bar() method. Foo defines foo() method which prints a message to STDERR. On the other hand, Bar.pm looks as follows:
# Bar.pm package Bar; use strict; use warnings; sub bar { Foo->foo } 1;
Bar defines bar() method which calls Foo's foo() method. I executed Foo.pm and confirmed the script output 'Foo::foo was called':
$ ls Foo.pm Bar.pm $ perl Foo.pm Foo::foo was called

This result shows us that Bar can call Foo's foo() method without loading Foo.pm (I mean, without 'use Foo;') In other words, Bar can call the caller's method ( Foo::foo() ). If so, why is this possible? Is this one of well-known specifications? Which perldoc helps me understand this result?

Sincerely,
Ryo