Функция 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;
Другие вопросы по тегам