Ответ dgw был почти готов, но содержал пару вещей, которые не являются лучшей практикой. Я считаю, что это лучше:
my %input0_map;
@input0_map{ @input0 } = ();
my @input = grep { exists $input0_map{$_} } @input1;
Вы не должны называть переменную 'tmp', если она не находится в очень маленькой области видимости. Поскольку этот фрагмент кода не заключен в фигурный блок, мы не знаем, насколько велика область видимости.
Вы не должны присваивать в хэш-фрагмент один «undef», потому что это означает, что первый элемент назначается с этим литералом undef, а другие элементы назначаются с неявным undefs. Это будет работать, но это плохой стиль. Либо присвойте им все значения, либо им ВСЕ присваивают неявно (как это происходит, если мы присваиваем из пустого списка).