#!/usr/bin/perl use strict; use warnings; use constant { DATA_FILE => 'try.txt', MATCHED_FILE => 'matched.txt', UNMATCHED_FILE => 'unmatched.txt', }; open(my $input, '<', DATA_FILE) or die "Cannot open file '" . DATA_FILE . "' for reading: $!"; open(my $matched, '>', MATCHED_FILE) or die "Cannot open file '" . MATCHED_FILE . "' for writing: $!"; open(my $unmatched, '>', UNMATCHED_FILE) or die "Cannot open file '" . UNMATCHED_FILE . "' for writing: $!"; while (my $line = <$input>) { chomp $line; my ($left, $right) = split /=/, $line; my @left_array = split / /, $left; my @right_array = split / /, $right; my $left_count = scalar @left_array; my $right_count = scalar @right_array; if ($left_count == $right_count) { print $matched "$line\n"; } else { my $diff = abs($left_count - $right_count); print $unmatched $line, "($diff) \n"; } } close $unmatched or die "Cannot close file '" . UNMATCHED_FILE . "': $!"; close $matched or die "Cannot close file '" . MATCHED_FILE . "': $!"; close $input or die "Cannot close file '" . DATA_FILE . "': $!";