Это действительно сильно зависит от вашего паттерна, но одну вещь, которую вы можете сделать, это присоединиться к паре матчей, первая из которых дисквалифицирует любую строку, которая содержит только пробел (или ничего). В этом примере будет отклонена любая строка, которая является пустой, только новой строкой или только любым количеством пробелов.
my @lines = grep { not /^\s*$/ and /$test/ } <$fp>;
Помните, что если в содержимое $ test входят специальные метасимволы регулярных выражений, то они либо должны быть предназначены для целей метасимволов, либо стерилизованы с помощью quotemeta()
.
Моя теория состоит в том, что у вас может быть строка, оканчивающаяся на \ n, которая каким-то образом соответствует вашему регулярному выражению $ text, или ваше регулярное выражение $ text содержит метасимволы, которые влияют на совпадение без вашего ведома. В любом случае предоставленный мною фрагмент, по крайней мере, вызовет отклонение «пустых строк», где «пустой» может означать полностью пустой (маловероятный), перевод новой строки, но в противном случае пустой (вероятный), или пробел, содержащий (возможные) строки, которые при печати выглядят пустыми.