perl6的stat函数

时间:2018-08-29 14:10:24

标签: perl6 stat file-attributes

perl6中是否有另一种方法可以获取文件属性详细信息,例如大小,access_time,modified_time等。而无需调用本地调用?

根据doc,它是“ 不太可能作为特定于POSIX的内置实现”。

除了系统调用stat之外,还有哪些解决方法可用?

任何想法或指示都值得赞赏。

谢谢。

2 个答案:

答案 0 :(得分:11)

请参见the IO::Path doc

例如:

say 'foo'.IO.s; # 3 if 'foo' is an existing file of size 3 bytes

.IO在字符串上创建一个IO::Path对象,该对象与该字符串给定的路径所对应的文件系统条目相对应。

the doc on ACCEPTS上查看使用结点同时获取多个属性的示例。


我不确定以下内容是否过多。如果是,请忽略它。希望它会有所帮助。

您可以通过Perl 6的HOW对象(又称高阶工作对象,How Objects Work对象,metaobjects-无论您想称呼它们的什么)来发现/探索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"(...)

答案 1 :(得分:1)

在 2021 年寻找这个问题的答案时,有 File::Stat 模块。它提供了一些额外的 stat(2) 信息,例如 UIDGID 和模式。

#!/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;