Archive::Zip使った。なんかEncodeの辺りが無理矢理な気がするが、こんな感じかしら。
use Archive::Zip; use File::Spec; use Encode; my $file = $ARGV[0]; my $zip = Archive::Zip->new(); die 'read error' unless $zip->read($file) == &Archive::Zip::AZ_OK; for my $member ( $zip->members ) { my $to = File::Spec->catfile(decode('shift_jis',$member->fileName())); $zip->extractMember( $member, $to ); }