http://qs321.pair.com?node_id=1221286


in reply to OO systems and Perl 5 (Was: Recap: Future of Perl 5)

That's pretty much what UNIVERSAL::Object aims to do, but uses UNIVERSAL::Object::new instead of UNIVERSAL::new. Probably pretty easy to do something like:

push @UNIVERSAL::ISA, 'UNIVERSAL::Object';

Replies are listed 'Best First'.
Re^2: OO systems and Perl 5 (Was: Recap: Future of Perl 5)
by RonW (Parson) on Aug 29, 2018 at 23:31 UTC

    Certainly a very interesting project. The advantage of UNIVERSAL::new would be that UNIVERSAL is automatically used.

    Of course, that leaves the task of actually getting anything added to UNIVERSAL.pm. From the comments in the file, it seems that a lot has already been removed from it and some people want to remove more from it.

      UNIVERSAL.pm itself is not so important. It's mostly just documentation. The guts of the UNIVERSAL package (UNIVERSAL::can, UNIVERSAL::isa, UNIVERSAL::DOES) are hard-coded into Perl, not part of a module.

      The disadvantage of having UNIVERSAL::new is that all packages automatically inherit from UNIVERSAL; even ones not designed to be used as classes. How much sense do things like this make?

      use strict; my $thing = strict->new;

      A whole lot of modules would need to add code like this to them:

      sub new { # override UNIVERSAL::new require Carp; Carp::croak("$_[0] is not a class"); }

        If "method dispatch" is not being used, how would UNIVERSAL::new be inherited?

        Also, related to LanX's comment, How does method dispatch interact with AUTOLOAD?