use strict; use warnings; my %dispatch = ( normal => sub{"$_[0] Normal dispatch"}, map( {$_ => sub{"$_[0] Sub returns $_"} } qw| Uno Dos tres|), ); print $dispatch{"normal"}->(0),"\n"; # 0 Normal dispatch (as expected) print $dispatch{"Uno"}->(1),"\n"; # WANT: "1 Sub returns Uno" print $dispatch{"Dos"}->(2),"\n"; # WANT: "2 Sub returns Dos" #### 0 Normal dispatch Use of uninitialized value $_ in concatenation (.) or string at .\testdispatch.pl line 5. 1 Sub returns Use of uninitialized value $_ in concatenation (.) or string at .\testdispatch.pl line 5. 2 Sub returns