our $Type ; BEGIN { if ( $^O =~ /dar/ ) { $Type = 'Mac' ; } elsif ( $^O =~ /sol/ ) { $Type = 'Sun' } elsif ( $^O =~ /aix/ ) { $Type = 'Aix' } else { die "unknown os." } }; package base ; sub common_routine {} sub specific_routine { die "must be one of mac, aix, sun" ; } sub package Mac ; our(@ISA) = qw/base/ ; sub specific_routine { DoMacStuff()} package Aix; our(@ISA) = qw/base/ ; sub specific_routine { DoAIXStuff()} package Sun ; our(@ISA) = qw/base/ ; sub specific_routine { DoSunStuff()} package main ; my($obj) = new $Type ; $obj->specific_routine ;