# Prepend $pwd as necessary @p=(); foreach (split("/", $path)) { pop @p, next if $_ eq '..'; next if $_ eq '.'; push @p, $_; } $path=join("/", @p); #### Benchmark: timing 1000 iterations of Mikfire, Zamboni... Mikfire: 1 wallclock secs ( 0.47 usr + 0.00 sys = 0.47 CPU) Zamboni: 4 wallclock secs ( 3.23 usr + 0.00 sys = 3.23 CPU) #### while ( $path =~ s#(/[^/]+)?/\.(\.)?/?#defined($2) ? "/" : "$1/"#e ) {;}