---
name: "UNIVERSAL::isa"
section: "3pm"
platform: "linux"
package: "perl-universal-isa"
version: "1.20171012-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/UNIVERSAL::isa"
---

# UNIVERSAL::isa(3pm)

Attempt to recover from people calling UNIVERSAL::isa as a function

## NAME

UNIVERSAL::isa - Attempt to recover from people calling UNIVERSAL::isa as a function

## VERSION

version 1.20171012

## SYNOPSIS

```
    # from the shell
    echo 'export PERL5OPT=-MUNIVERSAL::isa' >> /etc/profile
    # within your program
    use UNIVERSAL::isa;
    # enable warnings for all dodgy uses of UNIVERSAL::isa
    use UNIVERSAL::isa 'verbose';
```

## DESCRIPTION

Whenever you use "isa" in UNIVERSAL as a function, a kitten using Test::MockObject dies. Normally, the kittens would be helpless, but if they use UNIVERSAL::isa (the module whose docs you are reading), the kittens can live long and prosper.

This module replaces `"UNIVERSAL::isa"` with a version that makes sure that, when called as a function on objects which override `"isa"`, `"isa"` will call the appropriate method on those objects

In all other cases, the real `"UNIVERSAL::isa"` gets called directly.

**NOTE:** You should use this module only for debugging purposes. It does not belong as a dependency in running code.

## FUNCTIONS

### original\_isa

This sub contains the definition of the *original* `"UNIVERSAL::isa"` definition, in case you need it.

## WARNINGS

If the lexical warnings pragma is available, this module will emit a warning for each naughty invocation of `"UNIVERSAL::isa"`. Silence these warnings by saying:

```
    no warnings 'UNIVERSAL::isa';
```

in the lexical scope of the naughty code.

After version 1.00, warnings only appear when naughty code calls **UNIVERSAL::isa()** as a function on an invocant for which there is an overridden **isa()**.  These are really truly *active* bugs, and you should fix them rather than relying on this module to find them.

To get warnings for all potentially dangerous uses of **UNIVERSAL::isa()** as a function, not a method (that is, for *all* uses of the method as a function, which are latent bugs, if not bugs that will break your code as it exists now), pass the `"verbose"` flag when using the module.  This can generate many extra warnings, but they're more specific as to the actual wrong practice and they usually suggest proper fixes.

## SEE ALSO

Perl::Critic::Policy::BuiltinFunctions::ProhibitUniversalIsa

UNIVERSAL::can for another discussion of the problem at hand.

Test::MockObject for one example of a module that really needs to override `isa()`.

Any decent explanation of OO to understand why calling methods as functions is a staggeringly bad idea.

## SUPPORT

Bugs may be submitted through the RT bug tracker \<https://rt.cpan.org/Public/Dist/Display.html?Name=UNIVERSAL-isa\> (or bug-UNIVERSAL-isa@rt.cpan.org \<mailto:bug-UNIVERSAL-isa@rt.cpan.org\>).

## AUTHORS

- •

  Audrey Tang \<cpan@audreyt.org\>

- •

  chromatic \<chromatic@wgz.org\>

- •

  יובל קוג'מן (Yuval Kogman) \<nothingmuch@woobling.org\>

## CONTRIBUTORS

- •

  Karen Etheridge \<ether@cpan.org\>

- •

  Graham Knop \<haarg@haarg.org\>

- •

  Ricardo Signes \<rjbs@cpan.org\>

## COPYRIGHT AND LICENCE

This software is copyright (c) 2011 by chromatic@wgz.org.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
