my @dirs = `ls /var/log/HOSTS/*/*/$year/$month/$day/*`
I'm not sure where you want to go with this, but I assume you want to do something in each directory that exists for the day/month/year for each logged host.
The canonical Perl way of doing this (without relying on an external program) is to use the venerable File::Find module.
use File::Find;
find(
sub {
return unless
$File::Find::name =~ m{^/var/log/HOSTS/([^/]+)/([^/]+)/(\d+)/(\d
++)/(\d+)/(.*)$};
my( $dir1, $dir2, $year, $month, $day, $file ) =
( $1, $2, $3, $4, $5, $6 );
# do stuff with $file
},
'/var/log/HOSTS'
);
Or if you do just want to get the names of the directories that actually exist, you would write something like:
$File::Find::name
=~ m{^/var/log/HOSTS/([^/]+)/([^/]+)/(\d+)/(\d+)/(\d+)$}
and push, @dirs, $File::Find::name;
print@_{sort keys %_},$/if%_=split//,'= & *a?b:e\f/h^h!j+n,o@o;r$s-t%t#u' |