Aion-Fs
view release on metacpan or search on metacpan
* `unlink` + `rmdir`.
* [File::Path](https://metacpan.org/pod/File::Path) â `remove_tree("dir")`.
* [File::Path::Tiny](https://metacpan.org/pod/File::Path::Tiny) â `File::Path::Tiny::rm($path)`. Ðе вÑбÑаÑÑÐ²Ð°ÐµÑ Ð¸ÑклÑÑений.
* [Mojo::File](https://metacpan.org/pod/Mojo::File) â `path($file)->remove`.
## replace (&sub, @files)
ÐаменÑÐµÑ ÐºÐ°Ð¶Ð´Ñй Ñайл на `$_`, еÑли его изменÑÐµÑ `&sub`. ÐозвÑаÑÐ°ÐµÑ ÑайлÑ, в коÑоÑÑÑ
не бÑло замен.
`@files` Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¼Ð°ÑÑÐ¸Ð²Ñ Ð¸Ð· двÑÑ
ÑлеменÑов. ÐеÑвÑй ÑаÑÑмаÑÑиваеÑÑÑ ÐºÐ°Ðº пÑÑÑ, а вÑоÑой â как Ñлой. Слой по ÑмолÑÐ°Ð½Ð¸Ñ â `:utf8`.
`&sub` вÑзÑваеÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñайла из `@files`. Ð Ð½ÐµÑ Ð¿ÐµÑедаÑÑÑÑ:
* `$_` â ÑодеÑжимое Ñайла.
* `$a` â пÑÑÑ Ðº ÑайлÑ.
* `$b` â Ñлой коÑоÑÑм бÑл ÑÑиÑан Ñайл и коÑоÑÑм он бÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸Ñан.
РпÑимеÑе ниже Ñайл "replace.ex" ÑÑиÑÑваеÑÑÑ Ñлоем `:utf8`, а запиÑÑваеÑÑÑ Ñлоем `:raw` в ÑÑнкÑии `replace`:
```perl
local $_ = "replace.ex";
lay "abc";
replace { $b = ":utf8"; y/a/¡/ } [$_, ":raw"];
cat # => ¡bc
```
### See also
* [File::Edit](https://metacpan.org/pod/File::Edit) â `File::Edit->new($file)->replace('x', 'y')->save`.
* [File::Edit::Portable](https://metacpan.org/pod/File::Edit::Portable) â `File::Edit::Portable->new->splice(file => $file, line => 10, contens => ["line1", "line2"])`.
* [File::Replace](https://metacpan.org/pod/File::Replace) â `($infh,$outfh,$repl) = replace3($file); while (<$infh>) { print $outfh "X: $_" } $repl->finish`.
* [File::Replace::Inplace](https://metacpan.org/pod/File::Replace::Inplace).
## mkpath (;$path)
Ðак **mkdir -p**, но ÑÑиÑÐ°ÐµÑ Ð¿Ð¾ÑледнÑÑ ÑаÑÑÑ Ð¿ÑÑи (поÑле поÑледней коÑой ÑеÑÑÑ) именем Ñайла и не ÑоздаÑÑ ÐµÑ ÐºÐ°Ñалогом. Ðез паÑамеÑÑа иÑполÑзÑе...
* ÐÑли `$path` не Ñказан, иÑполÑзÑÐµÑ `$_`.
* ÐÑли `$path` ÑвлÑеÑÑÑ ÑÑÑлкой на маÑÑив, Ñогда иÑполÑзÑеÑÑÑ Ð¿ÑÑÑ Ð² каÑеÑÑве пеÑвого ÑлеменÑа и пÑава в каÑеÑÑве вÑоÑого ÑлеменÑа.
* ÐÑава по ÑмолÑÐ°Ð½Ð¸Ñ Ð±ÐµÑÑÑÑÑ Ð¸Ð· `AION_FS_DIR_DEFAULT_PERMISSION` Ñказанной в `%ENV` или `.env`. ÐÑли и Ñам и Ñам неÑ, Ñогда â `0755`.
* ÐозвÑаÑÐ°ÐµÑ `$path`.
```perl
local $_ = ["A", 0755];
mkpath # => A
eval { mkpath "/A/" }; $@ # ~> mkpath /A: Permission denied
mkpath "A///./file";
-d "A" # -> 1
```
### See also
* [File::Path](https://metacpan.org/pod/File::Path) â `mkpath("dir1/dir2")`.
* [File::Path::Tiny](https://metacpan.org/pod/File::Path::Tiny) â `File::Path::Tiny::mk($path)`. Ðе вÑбÑаÑÑÐ²Ð°ÐµÑ Ð¸ÑклÑÑений.
## mtime (;$path)
ÐÑÐµÐ¼Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑии `$path` в unixtime Ñ Ð´Ñобной ÑаÑÑÑÑ (из `Time::HiRes::stat`). Ðез паÑамеÑÑа иÑполÑзÑÐµÑ `$_`.
ÐÑбÑаÑÑÐ²Ð°ÐµÑ Ð¸ÑклÑÑение, еÑли Ñайл не ÑÑÑеÑÑвÑÐµÑ Ð¸Ð»Ð¸ Ð½ÐµÑ Ð¿Ñав:
```perl
local $_ = "nofile";
eval { mtime }; $@ # ~> mtime nofile: No such file or directory
mtime ["/"] # ~> ^\d+(\.\d+)?$
```
### See also
* `-M` â `-M "file.txt"`, `-M _` в днÑÑ
Ð¾Ñ ÑекÑÑего вÑемени.
* [stat](https://metacpan.org/pod/stat) â `(stat "file.txt")[9]` в ÑекÑндаÑ
(unixtime).
* [Time::HiRes](https://metacpan.org/pod/Time::HiRes) â `(Time::HiRes::stat "file.txt")[9]` в ÑекÑндаÑ
Ñ Ð´Ñобной ÑаÑÑÑÑ.
* [Mojo::File](https://metacpan.org/pod/Mojo::File) â `path($file)->stat->mtime`.
## sta (;$path)
ÐозвÑаÑÐ°ÐµÑ ÑÑаÑиÑÑÐ¸ÐºÑ Ð¾ Ñайле. Ðез паÑамеÑÑа иÑполÑзÑÐµÑ `$_`.
ЧÑÐ¾Ð±Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло иÑполÑзоваÑÑ Ñ Ð´ÑÑгими ÑайловÑми ÑÑнкÑиÑми, Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑаÑÑ ÑÑÑÐ»ÐºÑ Ð½Ð° маÑÑив из коÑоÑого беÑÑÑ Ð¿ÐµÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² каÑеÑÑв...
ÐÑбÑаÑÑÐ²Ð°ÐµÑ Ð¸ÑклÑÑение, еÑли Ñайл не ÑÑÑеÑÑвÑÐµÑ Ð¸Ð»Ð¸ Ð½ÐµÑ Ð¿Ñав:
```perl
local $_ = "nofile";
eval { sta }; $@ # ~> sta nofile: No such file or directory
sta(["/"])->{ino} # ~> ^\d+$
sta(".")->{atime} # ~> ^\d+(\.\d+)?$
```
### See also
* [Fcntl](https://metacpan.org/pod/Fcntl) â ÑодеÑÐ¶Ð¸Ñ ÐºÐ¾Ð½ÑÑанÑÑ Ð´Ð»Ñ ÑаÑÐ¿Ð¾Ð·Ð½Ð°Ð²Ð°Ð½Ð¸Ñ Ñежима.
* [BSD::stat](https://metacpan.org/pod/BSD::stat) â дополниÑелÑно возвÑаÑÐ°ÐµÑ atime, ctime и mtime в наноÑекÑндаÑ
, Ñлаги полÑзоваÑÐµÐ»Ñ Ð¸ Ð½Ð¾Ð¼ÐµÑ Ð³ÐµÐ½ÐµÑаÑии Ñайла. ÐÐ¼ÐµÐµÑ ÐÐÐ...
* [File::chmod](https://metacpan.org/pod/File::chmod) â `chmod("o=,g-w","file1","file2")`, `@newmodes = getchmod("+x","file1","file2")`.
* [File::stat](https://metacpan.org/pod/File::stat) â пÑедоÑÑавлÑÐµÑ ÐÐÐ-инÑеÑÑÐµÐ¹Ñ Ðº stat.
* [File::Stat::Bits](https://metacpan.org/pod/File::Stat::Bits) â аналогиÑен [Fcntl](https://metacpan.org/pod/Fcntl).
* [File::stat::Extra](https://metacpan.org/pod/File::stat::Extra) â ÑаÑÑиÑÑÐµÑ [File::stat](https://metacpan.org/pod/File::stat) меÑодами Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¸Ð½ÑоÑмаÑии о Ñежиме, а Ñак же пеÑезагÑ...
* [File::Stat::Ls](https://metacpan.org/pod/File::Stat::Ls) â возвÑаÑÐ°ÐµÑ Ñежим в ÑоÑмаÑе ÑÑилиÑÑ ls.
* [File::Stat::Moose](https://metacpan.org/pod/File::Stat::Moose) â ÐÐРинÑеÑÑÐµÐ¹Ñ Ð½Ð° Moose.
* [File::Stat::OO](https://metacpan.org/pod/File::Stat::OO) â пÑедоÑÑавлÑÐµÑ ÐÐÐ-инÑеÑÑÐµÐ¹Ñ Ðº stat. ÐÐ¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ atime, ctime и mtime ÑÑÐ°Ð·Ñ Ð² `DateTime`.
* [File::Stat::Trigger](https://metacpan.org/pod/File::Stat::Trigger) â Ñледилка за изменением аÑÑибÑÑов Ñайла.
* [Linux::stat](https://metacpan.org/pod/Linux::stat) â паÑÑÐ¸Ñ /proc/stat и возвÑаÑÐ°ÐµÑ Ð´Ð¾Ð¿-инÑоÑмаÑиÑ. Ðднако в дÑÑгиÑ
ÐС не ÑабоÑаеÑ.
* [Stat::lsMode](https://metacpan.org/pod/Stat::lsMode) â возвÑаÑÐ°ÐµÑ Ñежим в ÑоÑмаÑе ÑÑилиÑÑ ls.
* [VMS::Stat](https://metacpan.org/pod/VMS::Stat) â возвÑаÑÐ°ÐµÑ ÑпиÑки VMS ACL.
## path (;$path)
Ð Ð°Ð·Ð±Ð¸Ð²Ð°ÐµÑ ÑайловÑй пÑÑÑ Ð½Ð° ÑоÑÑавлÑÑÑие или ÑобиÑÐ°ÐµÑ ÐµÐ³Ð¾ из ÑоÑÑавлÑÑÑиÑ
.
* ÐÑли полÑÑÐ°ÐµÑ ÑÑÑÐ»ÐºÑ Ð½Ð° маÑÑив, Ñо воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÐµÐ³Ð¾ пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÐºÐ°Ðº пÑÑÑ.
* ÐÑли полÑÑÐ°ÐµÑ ÑÑÑÐ»ÐºÑ Ð½Ð° Ñ
ÑÑ, Ñо ÑобиÑÐ°ÐµÑ Ð¸Ð· него пÑÑÑ. ÐезнакомÑе клÑÑи пÑоÑÑо игноÑиÑÑеÑ. ÐÐ°Ð±Ð¾Ñ ÐºÐ»ÑÑей Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ФС â ÑазнÑй.
* ФС беÑÑÑÑÑ Ð¸Ð· ÑиÑÑемной пеÑеменной `$^O`.
* Ð Ñайловой ÑиÑÑеме не обÑаÑаеÑÑÑ.
```perl
{
local $^O = "freebsd";
path "." # --> {path => ".", file => ".", name => "."}
path ".bashrc" # --> {path => ".bashrc", file => ".bashrc", name => ".bashrc"}
path ".bash.rc" # --> {path => ".bash.rc", file => ".bash.rc", name => ".bash", ext => "rc"}
path ["/"] # --> {path => "/", dir => "/"}
local $_ = "";
path # --> {path => ""}
path "a/b/c.ext.ly" # --> {path => "a/b/c.ext.ly", dir => "a/b", file => "c.ext.ly", name => "c", ext => "ext.ly"}
path +{dir => "/", ext => "ext.ly"} # => /.ext.ly
path +{file => "b.c", ext => "ly"} # => b.ly
path +{path => "a/b/f.c", dir => "m"} # => m/f.c
path {volume => "ADFS::HardDisk.", file => "File"} # \> ADFS::HardDisk.File
path {volume => "ADFS::HardDisk.", folder => '$', file => "File"} # \> ADFS::HardDisk.$.File
path {folder => "x"} # => x.
path {dir => "x."} # => x.
}
{
local $^O = "MacOS";
my $path = {
path => '::::mix:report.doc',
dir => "::::mix:",
folder => ":::mix",
file => "report.doc",
name => "report",
ext => "doc",
};
path $path->{path} # --> $path
path $path # => $path->{path}
path 'report' # --> {path => 'report', file => 'report', name => 'report'}
path {volume => "x", file => "f"} # => x:f
path {folder => "x"} # => x:
}
{
local $^O = "vmesa";
my $path = {
path => ' USERID FILE EXT VOLUME ',
userid => "USERID",
file => "FILE EXT",
name => "FILE",
ext => "EXT",
volume => "VOLUME",
};
path $path->{path} # --> $path
path {volume => "x", file => "f"} # -> ' f x'
}
```
### See also
* https://en.wikipedia.org/wiki/Path_(computing)
ÐодÑли Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐС, а знаÑÐ¸Ñ Ð¸ опÑеделениÑ, какие в ÐС ÑайловÑе пÑÑи:
* `$^O` â ÑÑпеÑглобалÑÐ½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ ÑекÑÑей ÐС.
* [Devel::CheckOS](https://metacpan.org/pod/Devel::CheckOS), [Perl::OSType](https://metacpan.org/pod/Perl::OSType) â опÑеделÑÑÑ ÐС.
* [Devel::AssertOS](https://metacpan.org/pod/Devel::AssertOS) â запÑеÑÐ°ÐµÑ Ð¸ÑполÑзоваÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð²Ð½Ðµ ÑказаннÑÑ
ÐС.
* [System::Info](https://metacpan.org/pod/System::Info) â инÑоÑмаÑÐ¸Ñ Ð¾Ð± ÐС, ÐµÑ Ð²ÐµÑÑии, диÑÑÑибÑÑиве, CPU и Ñ
оÑÑе.
ÐÑделÑÑÑ ÑаÑÑи ÑайловÑÑ
пÑÑей:
* [File::Spec](https://metacpan.org/pod/File::Spec) â `($volume, $directories, $file) = File::Spec->splitpath($path)`. ÐоддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑолÑко unix, win32, os/2, vms, cygwin и amigaos.
* [File::Spec::Functions](https://metacpan.org/pod/File::Spec::Functions) â `($volume, $directories, $file) = splitpath($path)`.
* [File::Spec::Mac](https://metacpan.org/pod/File::Spec::Mac) â вÑ
Ð¾Ð´Ð¸Ñ Ð² [File::Spec](https://metacpan.org/pod/File::Spec), но не опÑеделÑеÑÑÑ Ð¸Ð¼, поÑÑÐ¾Ð¼Ñ Ð¿ÑиÑ
одиÑÑÑ Ð¸ÑполÑзоваÑÑ Ð¾ÑделÑнÐ...
* [File::Basename](https://metacpan.org/pod/File::Basename) â `($name, $path, $suffix) = fileparse($fullname, @suffixlist)`.
* [Path::Class::File](https://metacpan.org/pod/Path::Class::File) â `file('foo', 'bar.txt')->is_absolute`.
* [Path::Extended::File](https://metacpan.org/pod/Path::Extended::File) â `Path::Extended::File->new($file)->basename`.
* [Mojo::File](https://metacpan.org/pod/Mojo::File) â `path($file)->extname`.
* [Path::Util](https://metacpan.org/pod/Path::Util) â `$filename = basename($dir)`.
* [Parse::Path](https://metacpan.org/pod/Parse::Path) â `Parse::Path->new(path => 'gophers[0].food.count', style => 'DZIL')->push("chunk")`. РабоÑÐ°ÐµÑ Ñ Ð¿ÑÑÑми как Ñ Ð¼Ð°ÑÑивами (`push`, `pop`, `shift`, `splice`). Так ж...
## transpath ($path?, $from, $to)
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð¿ÑÑÑ Ð¸Ð· ÑоÑмаÑа одной ÐС в дÑÑгÑÑ.
ÐÑли `$path` не Ñказан, Ñо иÑполÑзÑеÑÑÑ `$_`.
ÐеÑеÑÐµÐ½Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаемÑÑ
ÐС ÑмоÑÑиÑе в пÑимеÑаÑ
подпÑогÑÐ°Ð¼Ð¼Ñ `path` ÑÑÑÑ Ð²ÑÑе или Ñак: `keys %Aion::Fs::FS`.
ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ñ ÐС â ÑегиÑÑÑонезавиÑимÑ.
```perl
local $_ = ">x>y>z.doc.zip";
transpath "vos", "unix" # \> /x/y/z.doc.zip
transpath "vos", "VMS" # \> [.x.y]z.doc.zip
transpath $_, "vos", "RiscOS" # \> .x.y.z/doc/zip
```
## splitdir (;$dir)
Ð Ð°Ð·Ð±Ð¸Ð²Ð°ÐµÑ Ð´Ð¸ÑекÑоÑÐ¸Ñ Ð½Ð° ÑоÑÑавлÑÑÑие. ÐиÑекÑоÑÐ¸Ñ ÑледÑÐµÑ Ð²Ð½Ð°Ñале полÑÑиÑÑ Ð¸Ð· `path->{dir}`.
```perl
local $^O = "unix";
[ splitdir "/x/" ] # --> ["", "x", ""]
```
## joindir (;$dirparts)
ÐбÑединÑÐµÑ Ð´Ð¸ÑекÑоÑÐ¸Ñ Ð¸Ð· ÑоÑÑавлÑÑÑиÑ
. ÐаÑем полÑÑеннÑÑ Ð´Ð¸ÑекÑоÑÐ¸Ñ ÑледÑÐµÑ Ð²ÐºÐ»ÑÑиÑÑ Ð² `path +{dir => $dir}`.
```perl
local $^O = "unix";
joindir qw/x y z/ # => x/y/z
path +{ dir => joindir qw/x y z/ } # => x/y/z/
```
## splitext (;$ext)
Ð Ð°Ð·Ð±Ð¸Ð²Ð°ÐµÑ ÑаÑÑиÑение на ÑоÑÑавлÑÑÑие. РаÑÑиÑение ÑледÑÐµÑ Ð²Ð½Ð°Ñале полÑÑиÑÑ Ð¸Ð· `path->{ext}`.
```perl
local $^O = "unix";
[ splitext ".x." ] # --> ["", "x", ""]
```
## joinext (;$extparts)
ÐбÑединÑÐµÑ ÑаÑÑиÑение из ÑоÑÑавлÑÑÑиÑ
. ÐаÑем полÑÑенное ÑаÑÑиÑение ÑледÑÐµÑ Ð²ÐºÐ»ÑÑиÑÑ Ð² `path +{ext => $ext}`.
```perl
local $^O = "unix";
joinext qw/x y z/ # => x.y.z
path +{ ext => joinext qw/x y z/ } # => .x.y.z
```
## include (;$pkg)
ÐодклÑÑÐ°ÐµÑ `$pkg` (еÑли он еÑÑ Ð½Ðµ бÑл подклÑÑÑн ÑеÑез `use` или `require`) и возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾. Ðез паÑамеÑÑа иÑполÑзÑÐµÑ `$_`.
Файл lib/A.pm:
```perl
package A;
sub new { bless {@_}, shift }
1;
```
Файл lib/N.pm:
```perl
package N;
sub ex { 123 }
1;
```
```perl
use lib "lib";
include("A")->new # ~> A=HASH\(0x\w+\)
[map include, qw/A N/] # --> [qw/A N/]
{ local $_="N"; include->ex } # -> 123
```
## catonce (;$file)
СÑиÑÑÐ²Ð°ÐµÑ Ñайл в пеÑвÑй Ñаз. ÐÑÐ±Ð°Ñ Ð¿Ð¾ÑледÑÑÑÐ°Ñ Ð¿Ð¾Ð¿ÑÑка ÑÑиÑаÑÑ ÑÑÐ¾Ñ Ñайл возвÑаÑÐ°ÐµÑ `undef`. ÐÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð²ÑÑавки модÑлей js и css в ÑезÑлÑ...
* `$file` Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¼Ð°ÑÑÐ¸Ð²Ñ Ð¸Ð· двÑÑ
ÑлеменÑов. ÐеÑвÑй ÑаÑÑмаÑÑиваеÑÑÑ ÐºÐ°Ðº пÑÑÑ, а вÑоÑой â как Ñлой. Слой по ÑмолÑÐ°Ð½Ð¸Ñ â `:utf8`.
* ÐÑли `$file` не Ñказан â иÑполÑзÑÐµÑ `$_`.
```perl
local $_ = "catonce.txt";
lay "result";
catonce # -> "result"
catonce # -> undef
eval { catonce[] }; $@ # ~> catonce not use ref path!
```
## wildcard (;$wildcard)
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ ÑайловÑÑ Ð¼Ð°ÑÐºÑ Ð² ÑегÑлÑÑное вÑÑажение. Ðез паÑамеÑÑа иÑполÑзÑÐµÑ `$_`.
* `**` - `[^/]*`
* `*` - `.*`
* `?` - `.`
* `??` - `[^/]`
* `{` - `(`
* `}` - `)`
* `,` - `|`
* ÐÑÑалÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑкÑаниÑÑÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `quotemeta`.
```perl
( run in 0.676 second using v1.01-cache-2.11-cpan-df04353d9ac )