in reply to Create a constructor named the same as your package name!

Neat idea, but what if a constructor needs no arguments?

--Solo
--
You said you wanted to be around when I made a mistake; well, this could be it, sweetheart.
  • Comment on Re: Create a constructor named the same as your package name!

Replies are listed 'Best First'.
Re^2: Create a constructor named the same as your package name!
by jryan (Vicar) on Jul 01, 2004 at 16:15 UTC

    I'm confused, what's wrong with this?

    my $e = Example::Module();
      my $e = Example::Module();
      That would be the same as:
      my $e = "Example::Module";
      So no, it doesn't work. I thought about it for a while... and I can't figure out a way around that corner case that doesn't break other class methods. Oh well... gotta say "new" sometime, I guess.

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

        There is one way that you can overcome it. It's pretty bad, though. :/

        #!/usr/bin/perl -l package Example::Module; use overload '""' => sub { ref shift }; sub new { bless [ $_[1] || "default" ], shift; } sub Example::Module { return Example::Module::->new(@_); } sub print_it { print $_[0]->[0]; } package main; $a = Example::Module(); $a->print_it; $b = Example::Module("b"); $b->print_it; __END__ default b

        Yeah. Not very pretty, I know. Also, it breaks if no parameters is an illegal option (i.e. your constructor returns undef or dies). This would come into play for calls such as Example::Module->print_it. Of course in that case you may as well just return "Example::Module" as the original code had.

        antirice    
        The first rule of Perl club is - use Perl
        The
        ith rule of Perl club is - follow rule i - 1 for i > 1