File-DataClass
view release on metacpan or search on metacpan
lib/File/DataClass/IO.pm view on Meta::CPAN
return $self;
}
sub rmdir {
my $self = shift;
CORE::rmdir $self->name
or $self->$_throw( 'Path [_1] not removed: [_2]',
[ $self->name, $OS_ERROR ] );
return $self;
}
sub rmtree {
my ($self, @args) = @_; ensure_class_loaded 'File::Path';
return File::Path::remove_tree( $self->name, @args );
}
sub seek {
my ($self, $posn, $whence) = @_;
$self->is_open or $self->assert_open( is_mswin ? 'r' : 'r+' );
CORE::seek $self->io_handle, $posn, $whence; $self->error_check;
return $self;
}
sub separator {
defined $_[ 1 ] and $_[ 0 ]->_separator( $_[ 1 ] ); return $_[ 0 ];
}
sub set_binmode {
my $self = shift;
is_ntfs and $self->$_push_layer(); # uncoverable branch true
$self->$_sane_binmode( $_ ) for (@{ $self->_layers });
return $self;
}
sub set_lock {
my $self = shift; $self->_lock or return;
my $async = $self->_lock == LOCK_NONBLOCKING ? TRUE : FALSE;
my $mode = $self->mode eq 'r' ? LOCK_SH : LOCK_EX;
$async and $mode |= LOCK_NB;
$self->_set_have_lock( (flock $self->io_handle, $mode) ? TRUE : FALSE );
return $self;
}
sub sibling {
my $self = shift; return $self->parent->child( @_ );
}
sub slurp {
my $self = shift; my $slurp = $self->all;
wantarray or return $slurp; local $RS = $self->_separator;
$self->_chomp or return split m{ (?<=\Q$RS\E) }mx, $slurp;
return map { CORE::chomp; $_ } split m{ (?<=\Q$RS\E) }mx, $slurp;
}
sub splitdir {
return File::Spec->splitdir( $_[ 0 ]->name );
}
sub splitpath {
return File::Spec->splitpath( $_[ 0 ]->name );
}
sub stat {
my $self = shift; my $exists = my @fields = stat( $self->name );
$exists or $self->is_open or return;
my %stat_hash = ( id => $self->filename );
@stat_hash{ STAT_FIELDS() } = $exists ? @fields : stat( $self->io_handle );
return \%stat_hash;
}
sub substitute {
my ($self, $search, $replace) = @_; $replace //= NUL;
(defined $search and CORE::length $search) or return $self;
my $perms = $self->$_untainted_perms;
my $wtr = $self->$_constructor( $self->name )->atomic;
$perms and $wtr->perms( $perms );
for ($self->getlines) { s{ $search }{$replace}gmx; $wtr->print( $_ ) }
$self->close; $wtr->close;
return $self;
}
sub tail {
my ($self, $lines, @args) = @_; my @res; $lines //= 10; $self->close;
while ($lines--) {
unshift @res, ($self->$_getline_backwards( @args ) or last);
}
$self->close;
return wantarray ? @res : join NUL, @res;
}
sub tell {
my $self = shift;
$self->is_open or $self->assert_open( is_mswin ? 'r' : 'r+' );
return CORE::tell $self->io_handle;
}
sub tempfile {
my ($self, $tmplt) = @_; my $tempdir;
( run in 2.391 seconds using v1.01-cache-2.11-cpan-71847e10f99 )