Функция stat для perl6
Есть ли в perl6 альтернативный способ получения таких атрибутов файла, как размер, access_time,ified_time... и т. Д., Без необходимости вызывать собственный вызов?
Согласно документу, он "вряд ли будет реализован как встроенный, как его специфичный для POSIX".
Какие варианты обходного пути доступны, кроме системного вызова stat?
Любые идеи или указатели очень ценятся.
Благодарю.
2 ответа
Смотрите документацию IO:: Path.
Например:
say 'foo'.IO.s; # 3 if 'foo' is an existing file of size 3 bytes
.IO
на строке создает IO::Path
объект, соответствующий записи файловой системы, соответствующей пути, заданному строкой.
Посмотрите примеры использования соединений для получения нескольких атрибутов одновременно в документеACCEPTS
,
Я не уверен, если следующее слишком много. Проигнорируйте это, если это. Надеюсь, это полезно.
Вы можете обнаружить / исследовать некоторые из того, что доступно в Perl 6, через его объекты HOW (то есть объекты работы более высокого порядка, объекты работы объектов, метаобъекты - как бы вы их ни называли), которые знают, как работают объекты определенного типа.
say IO::Path.^methods
дисплеи:
(BUILD new is-absolute is-relative parts volume dirname basename extension
Numeric sibling succ pred open watch absolute relative cleanup resolve
parent child add chdir rename copy move chmod unlink symlink link mkdir
rmdir dir slurp spurt lines comb split words e d f s l r w rw x rwx z
modified accessed changed mode ACCEPTS Str gist perl IO SPEC CWD path BUILDALL)
Вот некоторые из методов, доступных на IO::Path
объект.
(Вы можете получить более или менее с наречиями, например. say IO::Path.^methods(:all)
, но дисплей по умолчанию нацелен на то, чтобы дать вам те, которые вам, вероятно, наиболее интересны. Стрелка вверх (^
) означает вызов метода (.methods
) не отправляется инвоканту, а отправляется "вверх", до объекта HOW, как описано выше.)
Вот пример применения некоторых из них по одному:
spurt 'foo', 'bar'; # write a three letter string to a file called 'foo'.
for <e d f s l r w rw x rwx z modified accessed changed mode>
-> $method { say 'foo'.IO."$method"() }
Вторая строка делает for
цикл по методам, перечисленным их именами строк в <...>
построить. Чтобы вызвать метод по инвоканту, учитывая его имя в переменной $qux
, записывать ."$qux"(...)
,
В поисках ответа на этот вопрос в 2021 году есть модуль File :: Stat . Это дает некоторые дополнительные
stat(2)
такая информация, как
UID
,
GID
и режим.
#!/usr/bin/env raku
use File::Stat <stat>;
say File::Stat.new(path => $?FILE).mode.base(8);
say stat($?FILE).uid;
say stat($?FILE).gid;