Pull to refresh

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

Reading time 2 min
Views 5.4K
Original author: Moritz

Директории


Вместо 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
        }
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+10
Comments 6
Comments Comments 6

Articles