#!/usr/bin/perl use warnings; use strict; use File::Copy qw(copy); use Archive::Extract; use Cwd qw(abs_path); my $current_directory = $ARGV[0] // '.'; $current_directory = abs_path $current_directory; chdir $current_directory or die "directory doesn't exist: $!"; opendir my $dh, $current_directory or die "can't open directory: $!"; while ( my $file = readdir $dh ) { chomp $file; next if $file eq '.' or $file eq '..'; if ( $file =~ m{(?(?.+?)\.zip)$} ) { mkdir $+{new_folder}; ## make the folder copy $+{filename}, $+{new_folder}; ## copy file to be extracted into it's folder # files extracted in it's folder my $extract_file = Archive::Extract->new( archive => $+{filename} ); $extract_file->extract( to => $+{new_folder} ) or die $extract_file->error; } } closedir $dh or die "can't close directory: $!";