use Cwd; use constant LIMIT => 4 * 1024 * 1024 * 1000; my @dirs; # perhaps found with File::Find for my $dir (@dirs) { my $avail = LIMIT - dir_size($dir); print "'$dir' has $avail free\n"; } sub dir_size { my ($dir) = @_; my $orig_dir = getcwd; chdir '$dir' or die "Unable to chdir to '$dir': $!"; open(my $dh, '.') or die "Unable to open a dir handle for '$dir': $!"; my $size; while (<$dh>) { next if ! -f $_; $size += -s $_; # could use _ shortcut } chdir $orig_dir or die "Unable to restore dir to '$orig_dir': $!"; return $size; }