From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use 5.016;
our $VERSION = '1.03';
use strict;
my $MAGIC = pack "C*", 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07;
my $UNRAR = which('unrar') // which('UnRAR');
our $CAN_TEST = defined $UNRAR;
sub heuristic {
my $class = shift;
my $file = shift;
my $fh = shift;
return 0 unless $file =~ /\.cbr$/;
read $fh, my $mag, length $MAGIC;
return $mag eq $MAGIC;
}
sub _unrar {
my $rar = shift;
my $out = shift;
unless (defined $UNRAR) {
die "Cannot unrar $rar; unrar not installed\n";
}
qx/$UNRAR x '$rar' '$out'/;
unless ($? >> 8 == 0) {
die "Failed to run '$UNRAR' on $rar\n";
}
return 1;
}
sub extract {
my $self = shift;
my $out = shift;
_unrar($self->{Source}, $out);
return 1;
}
sub format { 'CBR' }
1;