Filesys-DiskFree
view release on metacpan or search on metacpan
DiskFree.pm view on Meta::CPAN
'inodes' => "df -i",
'format' => "irixish",
},
'hpux' => {
'blocks' => "bdf -l -i",
'inodes' => "bdf -l -i",
'format' => 'hpuxish',
},
'dec_osf' => {
'blocks' => "df",
'inodes' => "df -i",
'format' => 'svish',
},
);
use strict;
BEGIN {
$Format = $^O;
}
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $self = {
FORMAT => $Format,
DEVICES => undef,
MOUNTS => undef,
MODE => 'blocks'
};
bless ($self, $class);
return $self;
}
sub set(){
my $self=shift;
my @return;
return undef if(defined $self->{'DEVICES'});
if(@_){
if($_[0] =~ m/format/i){
push(@return,$self->{'FORMAT'});
$self->{'FORMAT'}=$_[1] if(defined $_[1]);
}
if($_[0] =~ m/mode/i){
push(@return,$self->{'MODE'});
$self->{'MODE'}='blocks' if($_[1] =~ m/block/i and defined $_[1]);
$self->{'MODE'}='inodes' if($_[1] =~ m/inode/i and defined $_[1]);
}
}
return @return;
}
sub command () {
my $self=shift;
return $Df{"\L".$self->{'FORMAT'}."\E"}{$self->{'MODE'}};
}
sub df(){
my $self=shift;
my $cmd="df";
$cmd=$self->command() or
croak "No df command known for format ".$self->{'FORMAT'};
open(HANDLE,"$cmd|") or croak("Cannot fork $!");
return $self->load(\*HANDLE);
close(HANDLE) or croak("Cannot df $!");
}
sub load() {
my $self=shift;
my $handle=shift;
if(ref $handle eq "GLOB"){
while(<$handle>){
$self->readline($_);
}
} else {
map { $self->readline($_) } split(/$\//,$handle);
}
return 'true';
}
sub readline() {
my $self=shift;
my $line=shift;
my ($device,$btotal,$bused,$bavail,$iused,$iavail,$mount,
$total,$used,$avail);
chomp($line);
$_=$Df{"\L".$self->{'FORMAT'}."\E"}{'format'};
if(/linuxish/i){
return undef if($line =~ /^Filesystem.*Mounted on/i);
($device,$total,$used,$avail,undef,$mount)=split(' ',$line);
if($self->{'MODE'} eq 'blocks'){
$total *= 1024;
$used *= 1024;
$avail *= 1024;
}
} elsif(/svish/i){
return undef if($line =~ /^Filesystem.*Mounted on/i);
if($self->{'MODE'} eq 'blocks'){
($device,$total,$used,$avail,undef,$mount)=split(' ',$line);
$total *= 1024;
$used *= 1024;
$avail *= 1024;
} else {
($device,$used,$avail,undef,$mount)=split(' ',$line);
$total=$used+$avail;
}
} elsif(/bsdish/){
return undef if($line =~ /^Filesystem.*Mounted on/i);
($device,$btotal,$bused,$bavail,undef,$iused,$iavail,undef,$mount)=
split(' ',$line);
if($self->{'MODE'} eq 'blocks'){
$total=$btotal*512;
$used=$bused*512;
( run in 3.989 seconds using v1.01-cache-2.11-cpan-56fb94df46f )