# sub file_normalize: based on https://www.perlmonks.org/?node_id=362893 sub file_normalize { use File::Spec::Functions; my $dir_ref = "."; my $file = shift; $file = File::Spec->rel2abs($file); my( $volume, $directories, $basename ) = File::Spec->splitpath(File::Spec->canonpath($file)); my @dirs_in = File::Spec->splitdir( $directories ); my @dirs_out; for my $dir (@dirs_in) { if ($dir eq "..") { pop @dirs_out; } else { push(@dirs_out, $dir); } } return File::Spec->abs2rel(File::Spec->catpath($volume, File::Spec->catdir(@dirs_out), $basename), $dir_ref); }