Aion-Fs
view release on metacpan or search on metacpan
lib/Aion/Fs.pm view on Meta::CPAN
package Aion::Fs;
use common::sense;
our $VERSION = "0.2.3";
use Exporter qw/import/;
use Scalar::Util qw//;
use List::Util qw//;
use Time::HiRes qw//;
use Aion::Fs::Cat;
use Aion::Fs::Lay;
use Aion::Fs::Find;
use Symbol qw//;
our @EXPORT = our @EXPORT_OK = grep {
ref \$Aion::Fs::{$_} eq "GLOB" && *{$Aion::Fs::{$_}}{CODE} && !/^(?:_|(NaN|import)\z)/
} keys %Aion::Fs::;
# СпиÑок ÐС Ñ ÑазлиÑаÑÑимÑÑ ÑинÑакÑиÑом ÑайловÑÑ
пÑÑей (должен бÑÑÑ Ð² нижнем ÑегиÑÑÑе)
use constant {
UNIX => 'unix',
AMIGAOS => 'amigaos',
CYGWIN => 'cygwin',
MSYS => 'msys',
MSYS2 => 'msys2',
MSWIN32 => 'mswin32',
DOS => 'dos',
OS2 => 'os2',
SYMBIAN => 'symbian',
VMS => 'vms',
VOS => 'vos',
RISCOS => 'riscos',
MACOS => 'macos',
VMESA => 'vmesa',
};
sub _fs();
sub _match($$) {
my ($match, $fs) = @_;
my @res; my @remove;
my $trans = $fs->{before_split} // sub {$_[0]};
for my $key (@$match) {
next unless exists $_->{$key};
push @remove, $key unless defined $_->{$key};
my $regexp = ($key eq "path"? $fs->{regexp}: $fs->{group}{$key});
my $val = $trans->($_->{$key});
push @res, $val =~ $regexp
? %+
: die "`$key` is in the wrong format `$val`. Has been used regexp: $regexp";
}
my %res = @res;
delete @res{keys %{$fs->{remove}->{$_}}} for @remove;
return %res, %$_;
}
sub _join(@) {
my ($match, @format) = @_;
my $fs = _fs;
my $trans = $fs->{before_split} // sub {$_[0]};
my %f = _match $match, $fs;
join "", List::Util::pairmap {
my @keys = ref $a? @$a: $a;
my $is = List::Util::first {defined $f{$_}} @keys;
defined $is? do {
my ($if, $format) = ref $b? @$b: (undef, $b);
my @val = map $trans->($f{$_}), @keys;
defined $if && $val[0] eq $if? $if:
$format !~ /%s/? $format:
sprintf($format, @val)
}: ()
( run in 1.516 second using v1.01-cache-2.11-cpan-5a3173703d6 )