#!/usr/bin/perl use lib 'lib', '../lib'; package My::Path::Class::Dir; use Moose; use MooseX::ExtendsNonMoose; extends 'Path::Class::Dir'; extends_non_moose; has path => (is => 'ro', isa => 'Str | ArrayRef[Str]'); has dirs => (is => 'ro', isa => 'ArrayRef[Str]'); sub SUPERBUILDARGS { my $class = shift; my %args = @_; return ref $args{path} eq 'ARRAY' ? $args{path} : [ $args{path} ]; }; sub basename { my $self = shift; my $dirs = $self->dirs; return $dirs->[scalar @$dirs - 1]; }; package main; my $dir = My::Path::Class::Dir->new( path => '/usr/local/lib/site_perl' ); my $basename = $dir->basename; print "Base name or $dir is $basename\n";