# ---------- my $_cleanPath = sub # ---------- { my $absPath = shift; return $absPath if $absPath =~ m{^/$}; my @elems = split m{/}, $absPath; my $ptr = 1; while( $ptr <= $#elems ) { if( $elems[ $ptr ] eq q{} ) { splice @elems, $ptr, 1; } elsif( $elems[ $ptr ] eq q{.} ) { splice @elems, $ptr, 1; } elsif( $elems[ $ptr ] eq q{..} ) { if( $ptr < 2 ) { splice @elems, $ptr, 1; } else { $ptr --; splice @elems, $ptr, 2; } } else { $ptr ++; } } return $#elems ? join q{/}, @elems : q{/}; };