use strict; use warnings; package Element; sub new { my $type = shift; my $self = {}; bless $self, $type; } package Circle; use vars qw(@ISA); @ISA = qw( Element ); package Square; use vars qw(@ISA); @ISA = qw( Element ); package Line; use vars qw(@ISA); @ISA = qw( Element ); package main; # seeking for a function like: # list_of_derived_classes ('Element'); # which returns -> 'Circle', 'Square', 'Line'