use File::Basename; for ( qw{foo/bar.ext ../moo/mar.ble} ) { my ( $name, $ext ) = split( /\./, fileparse( $_ )); print "$_ => $name and $ext\n"; }