use File::Spec; my ($volume, $dirstring, $file) = File::Spec->splitpath($pathname); my @dirs = File::Spec->splitdir($dirstring); # Unfortunately, splitpath's doc says: # The directory portion may or may not be returned with a trailing '/'. # # Which 'may or may not' give us an extra 'null' member of # @dirs, because splitdir allows null directory names. # # Hence this next line, purely for cleanup: pop @dirs if ($dirs[-1] eq ''); $file =~ s/\.pm$//; my $package = join('::',@dirs,$file);