To your first question, you can avoid slurping the file into an array by defining a sub to process the file one line at a time. I don't understand your SplitFields sub or its arguments, so I'll just assume pipe delimeters for the sake of argument.
I had the sub return a reference to save the unnecessary copying of the hash's contents.sub parse_file { my $filename = shift; my %hash; open my $fh, '<', $filename or die $!; local $_; while (<$fh>) { (my $key, $_) = split /\|/, $_, 2; s/\r\n$/\n/; $hash{$key} = $_; } return \%hash; } my $hTryptic = parse_file $ARGV[0]; my $hSemiTryptic = parse_file $ARGV[1];
For question 2, I think you can do better with hashes. Since you have arrays of keys for each, you can delete the keys of B from a copy of hash A, and the keys of A from hash B. Each deletion will return the values from the keys. If both hash copies turn up empty after that, they had identical key sets. Having the same keys for each, you can check values with a single scan over the key list.
After Compline,
Zaxo
In reply to Re: Can I make a sub for this?
by Zaxo
in thread Can I make a sub for this?
by sandrider
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |