Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

Re: Re: Problem with My New Perl Object

by janx (Monk)
on Jun 19, 2002 at 12:49 UTC ( #175644=note: print w/replies, xml ) Need Help??

in reply to Re: Problem with My New Perl Object
in thread Problem with My New Perl Object

To make even neater write:

sub new { my $pkg = shift; return bless {}, ref $pkg || $pkg; }
to be able to pull off tricks like this:

use strict; use warnings; package BaseClass; sub new { my $pkg = shift; bless {}, ref $pkg || $pkg; } sub bar { $_[0]->{'BaseClass::bar'} = $_[1]; } package SubClass; our @ISA = qw/BaseClass/; package main; my $obj = SubClass->new; my $foo = $obj->new; printf "obj isa %s\nfoo isa %s\n", $obj, $foo;

Using the  bless {}, ref $pkg || $pkg idiom you are writing classes that are safe to subclass.

Do have a look at Damian Conways excellent book Object Oriented Perl


Replies are listed 'Best First'.
Re^3: Problem with My New Perl Object
by dws (Chancellor) on Jun 19, 2002 at 16:35 UTC
    To make even neater write:
    return bless {}, ref $pkg || $pkg;

    This technique has been the basis of at least one recent "cargo cult" discussion. There are mixed opinions over whether overloading a class constructor is a prudent thing to do.

    In this post, merlyn points out a cleaner way to get the same effect, without overloading your class constructor.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (3)
As of 2023-04-01 07:33 GMT
Find Nodes?
    Voting Booth?

    No recent polls found