いつも忘れちゃうのでメモ。

UNIVERSAL::isaは、UNIVERSAL::isa()を呼んでも自分のクラス(階層)内にisa()が定義されてればそっちを呼ぶようにするためのモジュール。

以下のようにmainでUNIVERSAL::isaをuseしないと、最後の2つのUNIVERSAL::isa()は1を返します。つまり本当のUNIVERSAL::isa()が呼ばれる。
package A;

sub new { bless {}, shift }
sub isa { "hoge" }

package B;

use base qw( A );

sub new { bless {}, shift }

package main;

my $b = B->new;

warn $b->isa( "B" );            # hoge
warn $b->isa( "A" );            # hoge
warn UNIVERSAL::isa( $b, "B" ); # 1
warn UNIVERSAL::isa( $b, "A" ); # 1

これに対して、以下のようにmainでUNIVERSAL::isaをuseしてやると、最後のUNIVERSAL::isa()もhogeを返す、つまりクラスAで定義されてるisa()が呼ばれている。
package A;

sub new { bless {}, shift }
sub isa { "hoge" }

package B;

use base qw( A );

sub new { bless {}, shift }

package main;

use UNIVERSAL::isa;

my $b = B->new;

warn $b->isa( "B" );            # hoge
warn $b->isa( "A" );            # hoge
warn UNIVERSAL::isa( $b, "B" ); # hoge
warn UNIVERSAL::isa( $b, "A" ); # hoge
そしてUNIVERSAL::canも同じようなことをしてくれます。

ちなみにUNIVERSAL::requireはぜんぜんこれらとは関係なく
Module->require;
って呼べたり
Module->require or die "Cannot required";
とかdieできたり、モジュールでrequireメソッドを使えるようにするものです。
useもできたりします。