Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Archive::Extract - error handling

by luxs (Beadle)
on Aug 29, 2016 at 01:21 UTC ( [id://1170643]=perlquestion: print w/replies, xml ) Need Help??

luxs has asked for the wisdom of the Perl Monks concerning the following question:

I'm using Archive::Extract, as in the original example.
use Archive::Extract; my $ae = Archive::Extract->new( archive => 'myfile.tgz' ); my $ok = $ae->extract or die $ae->error;
And the file myfile.tgz is broken. This code produce error on the screen
Unable to extract 'myfile.tgz': at ./data_sort.pl line 156.
and continue to execute the further code, but it should die!!! What was wrong? How to catch this error?

Replies are listed 'Best First'.
Re: Archive::Extract - error handling
by kevbot (Vicar) on Aug 29, 2016 at 02:51 UTC
    I could not reproduce this problem using a bogus myfile.tgz (I used a small text file). This script would die as expected.
    #!/usr/bin/env perl use strict; use warnings; use Archive::Extract; my $ae = Archive::Extract->new( archive => 'myfile.tgz' ); my $ok = $ae->extract or die $ae->error;
    If you are on an older version of Archive::Extract, it may be worth updating to the most current version of Archive::Extract and trying again. If you still encounter the problem, perhaps something like Try::Tiny could help,
    #!/usr/bin/env perl use strict; use warnings; use Archive::Extract; my $ae = Archive::Extract->new( archive => 'myfile.tgz' ); my $ok; try{ $ok = $ae->extract; } catch { print "Caught!\n\n"; die $ae->error; }; print "This ran after try/catch!\n"; exit;
      Unfortunately, this script (Try::Tiny) do not caught anything.
      This is a archive wich generate this strange error http://3dpdb.com/VLF20160618.tgz
        As documented, if pure perl can't extract the archive, the external command line tool is tried instead if available. tar xzf works fine on the file, but produces nothing.

        Confirmed by turning debugging on:

        #!/usr/bin/perl use warnings; use strict; use Archive::Extract; $Archive::Extract::DEBUG = 1; my $ae = Archive::Extract->new( archive => 'VLF20160618.tgz' ); if ($ae->extract) { use Data::Dumper; Dumper($ae->files); } else { warn "ERROR: " . $ae->error; } print "Still here\n";

        Output:

        # Extracting with ->_untar_at Unable to extract '/home/choroba/_/0/VLF20160618.tgz': at /home/choro +ba/perl5/lib/perl5/Archive/Extract.pm line 954. Archive::Extract::_untar_at(Archive::Extract=HASH(0x163e5b8)) call +ed at /home/choroba/perl5/lib/perl5/Archive/Extract.pm line 438 Archive::Extract::extract(Archive::Extract=HASH(0x163e5b8)) called + at ./1.pl line 10 at ./1.pl line 10. # Extraction method failed # Extracting with ->_untar_bin Running [/usr/bin/gzip -c -d -f /home/choroba/_/0/VLF20160618.tgz | /b +in/tar -tf -]... Running [/usr/bin/gzip -c -d -f /home/choroba/_/0/VLF20160618.tgz | /b +in/tar -xf -]... # Extraction succeeded Still here

        ($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
Re: Archive::Extract - error handling
by Anonymous Monk on Aug 29, 2016 at 02:02 UTC

    and continue to execute the further code, but it should die!!! What was wrong? How to catch this error?

    check %SIG for a __DIE__ handler that doesn't die

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1170643]
Approved by kevbot
Front-paged by kevbot
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (3)
As of 2024-04-20 03:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found