$ perl -e '%x = { a => 1, b => 2 }' $ #### $ perl -e 'use warnings; %x = { a => 1, b => 2 }' Name "main::x" used only once: possible typo at -e line 1. Reference found where even-sized list expected at -e line 1. $ #### $ perl -e 'use strict; %x = { a => 1, b => 2 }' Global symbol "%x" requires explicit package name (did you forget to declare "my %x"?) at -e line 1. Execution of -e aborted due to compilation errors. $ #### use strict; use warnings; #### #!/usr/bin/env perl use strict; use warnings; my %all_voices = ( 'Microsoft Hedda Desktop - German' => 3, 'Microsoft Haruka Desktop - Japanese' => 4, 'Microsoft Zira Desktop - English (United States)' => 0, 'Microsoft Hazel Desktop - English (Great Britain)' => 1, 'Microsoft David Desktop - English (United States)' => 2, 'Microsoft Huihui Desktop - Chinese (Simplified)' => 5 ); for my $language (qw{German Japanese French English Chinese}) { my @available_voices = grep /^[^-]+-\s+$language/, keys %all_voices; if (@available_voices) { my $first_voice = ( sort { $all_voices{$a} <=> $all_voices{$b} } @available_voices )[0]; printf "%8s : [%d] %s\n", $language, $all_voices{$first_voice}, $first_voice; } else { printf "%8s : No voice found\n", $language; } } #### German : [3] Microsoft Hedda Desktop - German Japanese : [4] Microsoft Haruka Desktop - Japanese French : No voice found English : [0] Microsoft Zira Desktop - English (United States) Chinese : [5] Microsoft Huihui Desktop - Chinese (Simplified) #### ... if (@available_voices) { if (@available_voices > 1) { @available_voices = grep $all_voices{$_}, @available_voices; } ... #### German : [3] Microsoft Hedda Desktop - German Japanese : [4] Microsoft Haruka Desktop - Japanese French : No voice found English : [1] Microsoft Hazel Desktop - English (Great Britain) Chinese : [5] Microsoft Huihui Desktop - Chinese (Simplified)