in reply to Need to capture an optional sub-directory name

You way want to look into a module like File::Spec or Path::Class that allows manipulation of file paths to use the fact that you know this is a path situation.
use File::Spec sub SriptName { my ($self) = @_; my $name = Win32::GetFullPathName($0); my ($volume, $dirs, $file ) = File::Spec->splitpath( $name ); my (@dirs) = File::Spec->splitdir( $dirs ); $_ = shift @dirs until $_ eq 'scripts'; #drop all suffix (not sure if this is what you want here) # this could/should also be $file = basename($file) $file =~ s/\..*//; return join( ' - ', @dirs, $file) }