chop
возвращает выбранный символ, а не то, что осталось позади. Возможно, вы хотите что-то вроде этого:
my %lookup = map { substr($_,0,-1) => undef } @data;
Однако, как правило, вы должны рассмотреть возможность использования chomp
вместо chop
для более интеллектуального удаления CRLF, так что в итоге вы получите такую строку:
my %lookup =map {chomp; $_ => undef } @data;