Angel has asked for the wisdom of the Perl Monks concerning the following question:

I have gotten past the basics of OO and now have a couple new questions:

1. Can I make a list of objects?

2. Can an object create another object and pass it to yet another object.

A creates B internally and passes it to C

Replies are listed 'Best First'.
Re: Lists of objects and passing objects
by broquaint (Abbot) on Nov 18, 2002 at 14:46 UTC
    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

Re: Lists of objects and passing objects
by pg (Canon) on Nov 18, 2002 at 16:05 UTC
    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.