use strict; use warnings; my @dirs; while (my $line = ) { my ($indent, $entry, $isDir) = $line =~ m!^(\s*)([^/]*)(/|\\)?!; next unless defined $entry and length $entry; $#dirs = length $indent; $dirs[-1] = $entry; next if $isDir; print join '/', @dirs; }