Filesys::DiskSpace will do what you want. It doesn't use df or du. It uses a sub
that uses syscall.
#!/usr/bin/perl
use strict;
use warnings;
use Filesys::DiskSpace;
use Data::Dumper::Concise;
my $dir = '/';
print Dumper(
my($fs_type, $fs_desc, $used, $avail, $fused, $favail) = df $dir);