use Data::Dumper; my (%quiz, $number); while (){ chomp; if (s/^(\d+)\. *//) { $number = $1; $quiz{$number}{question} = $_; } elsif (s/^([A-Z])\. *//) { my $option = $1; $quiz{$number}{answer} = $option if s/ *\*$//; $quiz{$number}{$option} = $_; } else { next; } } print Dumper \%quiz; __DATA__ 1. What is my name? A. Rooney * B. Gerrard C. Ronaldo D. Ronaldinho 2. Who's your bet in the coming World Cup? A. Brazil * B. Germany C. England D. Cameroon