#!/usr/bin/perl -l use strict; use warnings; package MyClass; sub new { my ($class, $data)=@_; bless { DATA => $data }, $class; } sub item { my $self=shift; MyClass::Item->new($self,@_); } package MyClass::Item; sub new { my ($class, $daddy, $data)=@_; bless { DADDY => $daddy, DATA => $data }, $class; } sub info { my $self=shift; "Generic data: ", $self->{DADDY}{DATA}, " - ", "This item's data: ", $self->{DATA}; } package main; my $c=MyClass->new('Foo'); my @items=map $c->item($_), qw/aa bb cc/; print $_->info for @items; __END__