sub freespace { if( $^O eq 'MSWin32' ) { `fsutil volume diskfree .` =~ m[avail free bytes : (\d+)]; return ( $1 // die $! ) / 1024; } elsif( $^O eq ... ) { ... } else { `df -k .` =~ m[...]; return $1 // die $! } } ... my $free = freespace();