my $separator = ($^O eq 'MSWin') ? '\' : '/'; sub readFiles { my $ipath = shift; my @files; opendir(sDir, $ipath) || die "Unable to open directory '$ipath': $!"; for (readdir(sDir)) { if (!/^\.{1,2}$/ && -d $iPath . $separator . $_) { # recursive call for directory readFiles($iPath . $separator . $_); } else { # collect matching files push @files, $_ if /\.mat$/; } } closedir(sDir); for (@files){ print FILE $ipath, $separator, $_, "\n"; } }