Can I make a list of objects?
Yup, since objects are just scalars e.g
use IO::File;
my @list = map { IO::File->new($_) or die("ack: $!") } @ARGV;
Can an object create another object and pass it to yet another object.
Indeed.
sub Foo::new { bless {}, shift }
sub Foo::get_bar {
return Foo::Bar->new();
}
sub Foo::Bar::new { bless {}, shift }
sub Baz::new {
bless { bar => pop }, shift
}
my $baz = Baz->new( Foo->new()->get_bar() );
print $baz->{bar},$/;
__output__
Foo::Bar=HASH(0x80fbc2c)
A little laboured perhaps, but the above example is basically demonstrating that an object is just a blessed reference, nothing too magical about it.
HTH
_________ broquaint | [reply] [d/l] [select] |
Yes, you can. Most of the time, class is just a blessed hash or array. One thing worth to mention is that, when you pass a list of object, always pass the reference, as most of the time, they are reference already, just don't de-ref them. Otherwise, Perl will concat them into one big list. The following is a simple demon of this:
aclass.pm:
package aclass;
use strict;
sub new {
my $self = {};
$self->{"first"} = shift;
$self->{"second"} = shift;
bless $self;
return $self;
}
1;
a.pl:
use aclass;
use strict;
sub display {
my $a = shift;
my $b = shift;
print "a = $a, b = $b\n";
}
$a = new aclass(1, 2);
$b = new aclass(3, 4);
display($a, $b);
display(%{$a}, %{$b});
the first display does what you want, the second does not. This is a caution not just for object, but any time you pass list of aggregations.
| [reply] [d/l] |