use strict; use File::Spec::Functions; use Data::Dumper; # for debugging purpose only my $path = canonpath("../somedir/path/"); print "$path\n"; my @dirs = qw( ../dir/path1 ../dir/path2 ); my @canon_dirs = map { canonpath($_) } @dirs; print Dumper(\@canon_dirs); #### ../somedir/path $VAR1 = [ '../dir/path1', '../dir/path2' ]; #### ..\somedir\path $VAR1 = [ '..\\dir\\path1', '..\\dir\\path2' ]; #### use strict; use File::Spec::Functions; my %root = ( MSWin32 => "C:\\Data", solaris => "/var/data", ); my $ROOTDIR = $root{$^O} or die "Unknown platform"; my $file1 = canonpath("$ROOTDIR/data.txt"); print "$file1\n"; my $file2 = canonpath("$ROOTDIR/../input/data2.txt"); print "$file2\n"; #### C:\Data\data.txt C:\Data\..\input\data2.txt #### /var/data/data.txt /var/data/../input/data2.txt