use strict; use File::Find; use Carp; use Benchmark; use Test::More tests => 3; my $mountpoint = '/mnt/foofoo'; my $probepoint = qr/^3/; #my $mountpoint = '/tmp'; #my $probepoint = qr/^G/; ok(globMethod(), 'glob Method'); ok(opendirMethod(), 'opendir Method'); ok(osFindMethod(), 'OS Find Method'); sub globMethod { my $dirs = getDirs1($mountpoint); #probe for known directory return(scalar(grep(/$probepoint/, @$dirs)) == 1); } sub opendirMethod { my $dirs = getDirs2($mountpoint); return(scalar(grep(/$probepoint/, @$dirs)) == 1); } sub osFindMethod { my $dirs = getDirs3($mountpoint); return(scalar(grep(/$probepoint/, @$dirs)) == 1); } sub getDirs1 { my $root = shift; my $whackFile = "$root/Volume_Inventory.xml"; my @dirs = grep { $_ !~ /^\./ && -d "$_" } glob("$root/*"); @dirs = map {s|^$root/||; $_;} @dirs; return \@dirs; } sub getDirs2 { my $root = shift; my @dirs; if(not opendir(DH, $root)) { croak "Could not open dir: $root ($!)"; } @dirs = grep { /^[^\.]/ && -d "$root/$_" } readdir(DH); closedir DH; return \@dirs; } sub getDirs3 { my $root = shift; my $cmd = "find $root -maxdepth 1 -follow -type d"; my @dirs = grep {chomp && $_ !~ /^\./ && $_ !~ /^$root$/ && -d $_} `$cmd`; @dirs = map {s|^$root/||; $_;} @dirs; return \@dirs; }