CellFunc-File-stat_row
view release on metacpan or search on metacpan
lib/CellFunc/File/stat_row.pm view on Meta::CPAN
package CellFunc::File::stat_row;
use strict;
use warnings;
use Log::ger;
our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
our $DATE = '2024-12-10'; # DATE
our $DIST = 'CellFunc-File-stat_row'; # DIST
our $VERSION = '0.001'; # VERSION
our %SPEC;
our @st_fields = (
"dev", # 0
"ino", # 1
"mode", # 2
"nlink", # 3
"uid", # 4
"gid", # 5
"rdev", # 6
"size", # 7
"atime", # 8
"mtime", # 9
"ctime", # 10
"blksize", # 11
"blocks", # 12
);
our @st_field_formats = (
"number", # 0 "dev",
"number", # 1 "ino",
"", # 2 "mode",
"number", # 3 "nlink",
"number", # 4 "uid",
"number", # 5 "gid",
"number", # 6 "rdev",
"filesize", # 7 "size",
"iso8601_datetime", # 8 "atime",
"iso8601_datetime", # 9 "mtime",
"iso8601_datetime", # 10 "ctime",
"number", # 11 "blksize",
"number", # 12 "blocks",
);
our $resmeta = {
'table.fields' => \@st_fields,
'table.field_formats' => \@st_field_formats,
};
$SPEC{func} = {
v => 1.1,
summary => 'Take input value as filename, generate a row from stat()',
description => <<'MARKDOWN',
When file does not exist or cannot be `stat()`'d, will emit a warning and return
an undefined value instead of a row.
MARKDOWN
args => {
value => {
schema => 'filename*',
req => 1,
pos => 0,
},
follow_symlink => {
schema => 'bool*',
default => 1,
description => <<'MARKDOWN',
If set to false, will do an `lstat()` instead of `stat()`.
MARKDOWN
},
},
};
sub func {
my %args = @_;
my @st = ($args{follow_symlink} // 1) ? stat($args{value}) : lstat($args{value});
unless (@st) {
log_warn "Can't stat/lstat(%s): %s", $args{value}, $!;
return [200, "OK"];
}
[200, "OK", \@st, $resmeta];
}
1;
# ABSTRACT: Take input value as filename, generate a row from stat()
__END__
=pod
=encoding UTF-8
( run in 1.232 second using v1.01-cache-2.11-cpan-97f6503c9c8 )