in reply to Re^3: Perl OO: switch package context.
in thread Perl OO: switch package context.

my $new = $class->can('new'); return $class->$new(@_) if $new;
How does that prevent infinite loops? Won't "can" return the entry in UNIVERSAL now? What you should do is set local $I_AM_INSIDE_UNIVERSAL_NEW = 1, and then detect that for a loopback detection.

-- Randal L. Schwartz, Perl hacker
Be sure to read my standard disclaimer if this is a reply.

Replies are listed 'Best First'.
Re^5: Perl OO: switch package context.
by japhy (Canon) on May 14, 2005 at 13:41 UTC
    Ah, my bad. I hadn't even created the package, so can() returned false. I could use your method, but I'll opt for:
    return $class->$new(@_) if $new != \&UNIVERSAL::new;

    Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
    How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart