Операции с файлами в Perl 6

в 22:33, , рубрики: perl, perl 6, rakudo, Программирование

Директории

Вместо opendir и его друзей, в Perl 6 есть одна функция dir, которая возвращает список файлов из директории (по умолчанию, из текущей). Вместо тысячи слов:

    # в директории Rakudo 
    > dir
    build parrot_install Makefile VERSION parrot docs Configure.pl README dynext t src tools CREDITS LICENSE Test.pm
    > dir 't'
    00-parrot 02-embed spec harness 01-sanity pmc spectest.data

У dir есть необязательный параметр test, для использования grep по результатам работы:

    > dir 'src/core', test => any(/^C/, /^P/)
    Parcel.pm Cool.pm Parameter.pm Code.pm Complex.pm CallFrame.pm Positional.pm Capture.pm Pair.pm Cool-num.pm Callable.pm Cool-str.pm

Создаются директории через mkdir('foo')

Файлы

Простейший способ прочесть файл в Perl 6 – slurp. Она возвращает содержимое файла в виде String

    > slurp 'VERSION'
    2010.11

Есть доступ и к классическим методам:

    > my $fh = open 'CREDITS'
    IO()<0x1105a068>
    > $fh.getc # читает символ
    =
    > $fh.get # читает строчку
    pod
    > $fh.close; $fh = open 'new', :w # открывает на запись
    IO()<0x10f3e704>
    > $fh.print('foo   Bool::True
    > $fh.say('bar   Bool::True
    > $fh.close; say slurp('new')
    foobar

Проверки файлов

Проверки файлов на существование и типы проходят через умное сопоставление ~~

    > 'LICENSE'.IO ~~ :e # есть ли файл?
    Bool::True
    > 'LICENSE'.IO ~~ :d # а не директория ли это часом?
    Bool::False
    > 'LICENSE'.IO ~~ :f # ну значит файл?
    Bool::True

Легкотня.

File::Find

Когда заканчиваются стандартные функции, к делу подключаются модули. File::Find из набора File::Tools проходит по дереву директорий в поисках нужных файлов и создаёт ленивые списки найденных. Он идёт в комплекте с Rakudo Star, и его легко установить через neutro.

Пример:

find(:dir<t/dir1>, :type<file>, :name(/foo/)) 

выдаст ленивый список файлов, и только файлов, в директории t/dir1 с именем, подходящим под регулярку /foo/. Элементы списка – не простые строчки. Это объекты, которые превращаются в строки с полным путём, но при этом у них есть акцессоры для имени директории, в которой они лежат (dir) и имени файла (name). Подробнее см. в документации.

Полезные идиомы

Создаём новый файл

open('new', :w).close

Безымянный хэндлер файла

        given open('foo', :w) {
            .say('Всем привет!');
            .close
        }

Автор: SLY_G

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js