However, as of version 5.004 (or some subversive releases, like 5.003_08),
UNIVERSAL has some methods in it already. These are
built-in to your Perl binary, so they don't take any extra time to load.
Predefined methods include isa,
can,
and
VERSION.
isa
tells you whether an object or class
``is'' another one without having to traverse the hierarchy yourself:
$has_io = $fd->isa("IO::Handle"); $itza_handle = IO::Socket->isa("IO::Handle");
The can
method, called against that object or class, reports
back whether its string argument is a callable method name in that class.
In fact, it gives you back a function reference to that method:
$his_print_method = $obj->can('as_string');
Finally, the
VERSION method checks whether the class (or the
object's class) has a package global called $VERSION
that's
high enough, as in:
Some_Module->VERSION(3.0); $his_vers = $ob->VERSION();
However, we don't usually call VERSION ourselves. (Remember that an all upper-case function name is a Perl convention that indicates that the function will be automatically used by Perl in some way.) In this case, it happens when you say
use Some_Module 3.0;
If you wanted to add version checking to your Person class explained above, just add this to Person.pm:
use vars qw($VERSION); $VERSION = '1.1';
and then in Employee.pm could you can say
use Employee 1.1;
And it would make sure that you have at least that version number or higher available. This is not the same as loading in that exact version number. No mechanism currently exists for concurrent installation of multiple versions of a module. Lamentably.