use strict; use warnings; my @switches = qw /-d -l -m/; my @values = qw /-d disk1 disk2 disk3 -l load1 load2 load3 load4 -m memory1 memory2/; my %switches; @switches {@switches} = (); my $curr; foreach my $v (@values) { if (exists $switches {$v}) { $curr = $v; next; } die "Unknown switch: $v\n" unless defined $curr; push @{$switches {$curr}} => $v; } while () { chomp; $_ = "-$_"; if (exists $switches {$_}) { if ($switches {$_}) { print "Values for $_: @{$switches{$_}}\n"; } else { print "$_ does not have values.\n"; } } else { print "Unknown switch $_\n"; } } __DATA__ l d m x #### Values for -l: load1 load2 load3 load4 Values for -d: disk1 disk2 disk3 Values for -m: memory1 memory2 Unknown switch -x