TPath-Forester-File
view release on metacpan or search on metacpan
lib/TPath/Forester/File/Node.pm view on Meta::CPAN
);
has is_link => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => sub {
my $self = shift;
return unless $self->real;
return -l $self;
},
);
has is_binary => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => sub {
my $self = shift;
return unless $self->real;
return -B $self;
},
);
has is_text => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => sub {
my $self = shift;
return unless $self->real;
return -T $self;
},
);
has is_empty => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => sub {
my $self = shift;
return unless $self->real;
return $self->size == 0;
}
);
has not_empty => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => sub {
my $self = shift;
return unless $self->real;
return !$self->is_empty;
}
);
has user => ( is => 'ro', isa => 'Str', lazy => 1, builder => '_user' );
# memoized uid -> user converter
sub _user {
my $self = shift;
state %map;
my $uid = $self->uid;
my $user = $map{$uid} //= getpwuid($uid);
return $user;
}
has group => ( is => 'ro', isa => 'Str', lazy => 1, builder => '_group' );
# memoized gid -> group converter
sub _group {
my $self = shift;
state %map;
my $gid = $self->gid;
my $group = $map{$gid} //= getgrgid($gid);
return $group;
}
has is_root => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => sub {
my $self = shift;
return unless $self->real;
return !defined $self->parent;
}
);
has can_read => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => sub { stat_cando( shift->stats, Fcntl::S_IRUSR, 1 ) }
);
has can_truly_read => (
is => 'ro',
isa => 'Bool',
lazy => 1,
builder => '_can_truly_read',
);
sub _can_truly_read {
my $self = shift;
use filetest 'access';
return -r $self;
}
has can_write => (
is => 'ro',
isa => 'Bool',
lazy => 1,
default => sub { stat_cando( shift->stats, Fcntl::S_IWUSR, 1 ) }
);
has can_truly_write => (
is => 'ro',
isa => 'Bool',
lazy => 1,
builder => '_can_truly_write'
);
( run in 1.816 second using v1.01-cache-2.11-cpan-7f9471e7e0a )