sub zip { my $zip_file = shift; return unless ($zip_file); my $zip = Archive::Zip->new( $zip_dir . $zip_file ) || die; my $file_name = $zip->read(); # read file xml foreach my $member ($zip->members()) { # print file information my $member_file_name = $member->fileName(); push @members_name, $member_file_name; # here I ahve the file name example: bunch of file names like: 12345_0223.jpg 77664_0223.jpg ... } my @xml_files = $zip->membersMatching( '.*\.XML' ); foreach (@xml_files) { my $xml = $_->xml(); open my $xml_fh, '<', \$xml or die "Can't open scalar filehandle: $!"; my $first_line = <$xml_fh>; while (<$xml_fh>) { chomp; if(/(.*?)<\/account>/gi){ my $accountnumber = $1; print "Test - $accountnumber\n"; # here I have the account numbers from he xml file, like: 12345 77664 ... # now here I would like to match the account number, if its part of a file name in @members_name # and send results to the other sub with corresponded values. if () { to_sub( $zip, $accountnumber, $members_name[] ); } } } } }