Archive-Libarchive-Extract

 view release on metacpan or  search on metacpan

lib/Archive/Libarchive/Extract.pm  view on Meta::CPAN

package Archive::Libarchive::Extract;

use strict;
use warnings;
use Archive::Libarchive 0.04 qw( ARCHIVE_OK ARCHIVE_WARN ARCHIVE_EOF ARCHIVE_EXTRACT_TIME ARCHIVE_EXTRACT_PERM ARCHIVE_EXTRACT_ACL ARCHIVE_EXTRACT_FFLAGS );
use Ref::Util qw( is_plain_coderef is_plain_arrayref is_plain_scalarref is_ref );
use Carp ();
use File::chdir;
use Path::Tiny ();
use 5.020;
use experimental qw( signatures postderef );

# ABSTRACT: An archive extracting mechanism (using libarchive)
our $VERSION = '0.03'; # VERSION


sub new ($class, %options)
{
  Carp::croak("Required option: one of filename or memory")
    unless defined $options{filename} || defined $options{memory};

  Carp::croak("Exactly one of filename or memory is required")
    if defined $options{filename} && defined $options{memory};

  if(defined $options{filename})
  {
    foreach my $filename (@{ is_plain_arrayref($options{filename}) ? $options{filename} : [$options{filename}] })
    {
      Carp::croak("Missing or unreadable: $filename")
        unless -r $filename;
    }
  }
  elsif(!(is_plain_scalarref $options{memory} && defined $options{memory}->$* && !is_ref $options{memory}->$*))
  {
    Carp::croak("Option memory must be a scalar reference to a plain non-reference scalar");
  }

  Carp::croak("Entry is not a code reference")
    if defined $options{entry} && !is_plain_coderef $options{entry};

  my $self = bless {
    filename   => delete $options{filename},
    passphrase => delete $options{passphrase},
    entry      => delete $options{entry},
    memory     => delete $options{memory},
  }, $class;

  Carp::croak("Illegal options: @{[ sort keys %options ]}")
    if %options;

  return $self;
}


sub filename ($self)
{
  return $self->{filename};
}


sub to ($self)
{
  return $self->{to};
}


 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 5.512 seconds using v1.00-cache-2.02-grep-82fe00e-cpan-9f2165ba459b )