This may point you in a useful direction:
use strict; use warnings; my %param = ( fname1 => "Fred", lname1 => 'Bloggs', email1 => 'fred@xyzzy.com', fname2 => "Joe", lname2 => 'Bloggs', email2 => 'joe@plugh.com', fname3 => "Sue", lname3 => 'Brown', phone3 => '555-1234-567', fname4 => "", lname4 => 'Brown', phone4 => '555-1234-567', fname5 => "Liz", lname4 => 'Green', ); my @entries; for my $key (keys %param) { my ($field, $num) = $key =~ /^(.*?)(\d+)/; next if ! defined $num; ${$entries[--$num]}{$field} = $param{$key} || ''; } for my $entry (@entries) { next unless ($$entry{lname} && $$entry{fname}); # Must have a full n +ame next unless ($$entry{phone} || $$entry{email}); # Must have phone or + email $$entry{phone} ||= ''; $$entry{email} ||= ''; print "$$entry{lname},$$entry{fname},$$entry{phone},$$entry{email}\n +"; }
Prints:
Bloggs,Fred,,fred@xyzzy.com Bloggs,Joe,,joe@plugh.com Brown,Sue,555-1234-567,
Update to get closer to OP's requested behaviour
In reply to Re^3: retrieving similar form params
by GrandFather
in thread retrieving similar form params
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |