Aion-Fs
view release on metacpan or search on metacpan
lib/Aion/Fs.pm view on Meta::CPAN
sub joinext(@) {
join _fs->{symext}, @_
}
# ÐÑделÑÐµÑ Ð² пÑÑи ÑоÑÑавлÑÑÑие, а еÑли полÑÑÐ°ÐµÑ Ñ
еÑ, Ñо обÑединÑÐµÑ ÐµÐ³Ð¾ в пÑÑÑ
sub path(;$) {
my ($path) = @_ == 0? $_: @_;
my $fs = _fs;
if(ref $path eq "HASH") {
local $_ = $path;
return $fs->{join}->();
}
($path) = @$path if ref $path;
$path = $fs->{before_split}->($path) if exists $fs->{before_split};
+{
$path =~ $fs->{regexp}? (map { $_ ne "ext" && $+{$_} eq ""? (): ($_ => $+{$_}) } keys %+): (error => 1),
path => $path,
}
}
# ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð¿ÑÑÑ Ð¸Ð· ÑоÑмаÑа одной ÐС в дÑÑгÑÑ
sub transpath ($$;$) {
my ($path, $from, $to) = @_ == 2? ($_, @_): @_;
my (@dir, @folder, @ext);
{ local $^O = $from;
$path = path $path;
@dir = splitdir $path->{dir} if exists $path->{dir} && !exists $path->{folder};
@folder = splitdir $path->{folder} if exists $path->{folder};
@ext = splitext $path->{ext} if exists $path->{ext};
}
delete $path->{path};
delete $path->{dir} if exists $path->{folder};
delete $path->{file};
{ local $^O = $to;
@dir = @folder, @folder = () if !_fs->{group}{folder};
$path->{dir} = joindir @dir if scalar @dir;
$path->{folder} = joindir @folder if scalar @folder;
$path->{ext} = joinext @ext if scalar @ext;
path $path;
}
}
# как mkdir -p
use constant FILE_EXISTS => 17;
use config DIR_DEFAULT_PERMISSION => 0755;
sub mkpath (;$) {
my ($path) = @_ == 0? $_: @_;
my $permission;
($path, $permission) = @$path if ref $path;
$permission = DIR_DEFAULT_PERMISSION unless Scalar::Util::looks_like_number $permission;
local $!;
if(isUNIX) {
while($path =~ m!/!g) {
mkdir $`, $permission
or ($! != FILE_EXISTS? die "mkpath $`: $!": ())
if $` ne '';
}
}
else {
my $part = path $path;
return $path unless exists $part->{folder};
my @dirs = splitdir $part->{folder};
# ÐÑли волÑм или пеÑвÑй dirs пÑÑÑ - знаÑÐ¸Ñ Ð¿ÑÑÑ Ð¾ÑноÑиÑелÑнÑй
my $cat = $part->{volume};
for(my $i=0; $i<@dirs; $i++) {
next if $dirs[$i] eq "";
my $cat = path +{
$part->{volume}? (volume => $part->{volume}): (),
folder => joindir(@dirs[0..$i]),
};
mkdir $cat, $permission or ($! != FILE_EXISTS? die "mkpath $cat: $!": ());
}
}
$path
}
# ÐолÑÑиÑÑ Ð¸ÑеÑаÑÐ¾Ñ Ð½Ð° Ñайл
sub icat(;$) {
my ($file) = @_ == 0? $_: @_;
my $layer = ":utf8";
($file, $layer) = @$file if ref $file;
my $f = Symbol::gensym;
open $f, "<$layer", $file or die "icat $file: $!";
Aion::Fs::Cat->new(f => $f, path => $file)
}
# ÐолÑÑиÑÑ ÑайловÑй деÑкÑипÑÐ¾Ñ Ð´Ð»Ñ Ð²Ñвода
sub ilay(;$) {
my ($file) = @_ == 0? $_: @_;
my $layer = ":utf8";
($file, $layer) = @$file if ref $file;
my $f = Symbol::gensym;
open $f, ">$layer", $file or die "ilay $file: $!";
Aion::Fs::Lay->new(f => $f, path => $file)
}
# СÑиÑаÑÑ Ñайл
( run in 1.814 second using v1.01-cache-2.11-cpan-5735350b133 )