my $snickle = CGI -> new;
package Gonbagger;
sub one {bless [] => "Fumble"}
sub two {one}
sub three {two}
sub four {$snickle}
All four subs return a blessed object. Do you call all of
them constructors? Would you call an accessor method that
happens to return an object (instead of say a string or a
number) a constructor? After all, the returned value is
something that "looks, talks, and walks like an object."
Client code doesn't know what's going on under the hood.
Java and Ruby have methods that are constructors. They are
special, in the sense that they are called implicitely, and
can't/shouldn't be called directly. Unlike Perl's class methods that just happen to return an object.
What if I write my class like this:
package Lioger;
use Exporter ();
@Lioger::EXPORT = qw /lioger1/;
@Lioger::ISA = qw /Exporter/;
sub lioger1 {
return if @_;
my $x = bless [] => __PACKAGE__;
$x [0] = $x;
}
sub lioger2 {
${$_ [0]} [0]
}
Are both methods constructors?
Language like Java, Ruby and C++ don't call just any function that happens to return an object a "constructor".
Abigail