CGI-Bus
view release on metacpan or search on metacpan
lib/CGI/Bus/fut.pm view on Meta::CPAN
my $v ='';
foreach my $d (@p) {
$v .= $d;
($v eq '') ||mkdir($v, $m) ||die("mkdir '$v': $!\n") if !-d $v;
$v .='/'
}
}
$p
}
sub rmpath {
my ($s, $p) =@_;
my $r =0;
while ($p && -d $p) {
last if !rmdir($p);
$r +=1;
$s->pushmsg("rmpath $p");
last if !($p =~/[\\\/][^\\\/]+$/);
$p =$`;
}
}
sub size {
my $s =shift;
my $opt =($_[0] =~/^\-/i ? shift : '-i');
my $file=shift;
my $sub =(ref($_[0]) ? shift : sub{1});
my $sze =0;
$s->find($opt, $file, sub{$sze +=$_[0]->[7] if &$sub(@_)});
$sze
}
#######################
# File Utils
#######################
sub fcompare {
my $s =shift;
my $opt =($_[0] =~/^\-/i ? shift : '');
my $ret =eval("use File::Compare; compare(\@_)");
if ($@ || $ret <0) {die("compare(" .join(', ',@_) ."): $@\n"); 0}
else {$ret}
}
sub fhandle {
my ($s,$file,$sub)=@_;
my $hdl =select();
my $ret;
if (ref($file) || ref(\$file) eq 'GLOB') {select(*$file); $ret =&$sub($hdl); select($hdl)}
else {
my $c =(caller(1) ? caller(1) .'::' : '');
local *{"${c}HANDLE"}; open("${c}HANDLE", $file) || die("open '$file': $!\n");
select ("${c}HANDLE"); $ret =&$sub($hdl); select($hdl);
close ("${c}HANDLE") || die("close '$file': $!\n");
}
$ret;
}
sub fload {
my $s =shift;
my $opt =($_[0] =~/^\-/i ? shift : ''); # 'a'rray, 's'calar, 'b'inary
$opt =$opt .'a' if $opt !~/[asb]/i && wantarray;
my ($file, $sub) =@_;
my ($row, @rez);
local *IN;
eval ('use Fcntl qw(:DEFAULT :flock)');
($] < 5.006 ? open(IN, "<$file") : eval 'open(IN, "<", $file)')
|| die("open '<$file': $!\n");
flock(IN, LOCK_SH());
if ($sub) {
$row =1;
local $_;
while (!eof(IN)) {
defined($_ =<IN>) || die("read '<$file': $!\n");
chomp;
$opt=~/a/i ? &$sub() && push(@rez,$_)
: &$sub();
}
}
elsif ($opt=~/a/i) {
while (!eof(IN)) {
defined($row =<IN>) || die("read '<$file': $!\n");
chomp($row);
push (@rez, $row);
}
}
else {
binmode(IN) if $opt =~/b/i;
defined(read(IN, $row, -s $file)) || die("read '<$file': $!\n");
}
close(IN) || die("close '<$file': $!\n");
$opt=~/a/i ? @rez : $row
}
sub fstore {
my $s =shift;
my $opt =($_[0] =~/^\-/i ? shift : ''); # 'b'inary
my $file =shift;
local *OUT;
eval ('use Fcntl qw(:DEFAULT :flock)');
my $mode ='>';
$mode ='>>' if $opt =~/>/;
if (substr($file,0,1) eq '>') {
$mode ='>>';
$file =substr($file,1);
}
($] < 5.006 ? open(OUT, "${mode}${file}") : eval 'open(OUT, $mode, $file)')
( run in 2.045 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )