do { if (exists $o->{$path}) { # Do stuff } # trim path print "\t\t$path\n"; $path =~ s:(^/$)|((?<=^/)[^/]+$)|(/[^/]+$)::x; } while ( length $path > 0 );