Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^2: OO systems and Perl 5 (Was: Recap: Future of Perl 5)

by RonW (Parson)
on Aug 29, 2018 at 23:31 UTC ( [id://1221339]=note: print w/replies, xml ) Need Help??


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

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.

Replies are listed 'Best First'.
Re^3: OO systems and Perl 5 (Was: Recap: Future of Perl 5)
by tobyink (Canon) on Aug 30, 2018 at 07:57 UTC

    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?

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

        use strict; use warnings; use Data::Dump qw/pp dd/; Class->new("method"); Class::new("function"); # sub UNIVERSAL::new { # warn "UNIVERSAL", pp \@_; # } package Class; use Data::Dump qw/pp dd/; sub AUTOLOAD { warn "AUTOLOAD", pp \@_; }

        AUTOLOAD["Class", "method"] at d:/Users/lanx/AppData/Roaming/exp/new_a +utoload.pl line 23. AUTOLOAD["function"] at d:/Users/lanx/AppData/Roaming/exp/new_autoload +.pl line 23.

        with UNIVERSAL::new() uncommented:

        UNIVERSAL["Class", "method"] at d:/Users/lanx/AppData/Roaming/exp/new_ +autoload.pl line 14. AUTOLOAD["function"] at d:/Users/lanx/AppData/Roaming/exp/new_autoload +.pl line 23.

        So a class which counts on catching ->new in AUTOLOAD would be sabotaged.

        A normal function call wouldn't be effected by UNIVERSAL.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1221339]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (4)
As of 2024-04-23 17:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found