use strict; use warnings; use File::Path; use File::Find; use Cwd; my $dir="/home/testing"; $dir = "./a"; my @dir = ($dir); my @srcfiles; find(\&srcfind, @dir); sub srcfind { ## my $file = $File::Find::name; -- wrong my $file = $_; printf "TFD> in dir %s, file $file\n", getcwd(); if (-f $file) { if ($file =~ /\.Z$/ or $file =~ /\.zip$/ or $file =~ /\.tar$/ ) { push @srcfiles, $file; } } } if(@srcfiles){ print "There are some files\n"; }else{ print "There are no files \n"; } __END__ Prints: TFD> in dir C:/Documents and Settings/liverpole/targetdir, file . TFD> in dir C:/Documents and Settings/liverpole/targetdir, file a TFD> in dir C:/Documents and Settings/liverpole/targetdir, file a.Z TFD> in dir C:/Documents and Settings/liverpole/targetdir, file a.zip TFD> in dir C:/Documents and Settings/liverpole/targetdir, file b.Z TFD> in dir C:/Documents and Settings/liverpole/targetdir, file b.zip TFD> in dir C:/Documents and Settings/liverpole/targetdir, file c.Z There are some files