To bardzo zależy od twojego wzoru, ale jedną rzeczą, którą możesz zrobić, jest dołączenie do paru meczów, z których pierwszy dyskwalifikuje linię zawierającą tylko spację (lub nic). W tym przykładzie odrzucona zostanie tylko linia pusta, nowa linia lub dowolna ilość białych znaków.
my @lines = grep { not /^\s*$/ and /$test/ } <$fp>;
Należy pamiętać, że jeśli zawartość $ testu stało się to wyrażenie regularne specjalne metaznaki one albo muszą być przeznaczone do ich celów Metaznak lub sterylizowane quotemeta()
.
Moje teorie sugerują, że linia może być zakończona w \ n, co w jakiś sposób pasuje do wyrażenia tekstowego $ text, lub wyrażenie tekstowe $ zawiera metaznaki, które wpływają na dopasowanie, bez wiedzy użytkownika. Tak czy inaczej, podany przeze mnie fragment będzie przynajmniej wymuszał odrzucenie "pustych linii", gdzie puste może oznaczać całkowicie puste (mało prawdopodobne), znak nowej linii zakończony, ale poza tym pusty (prawdopodobnie) lub białe znaki zawierające (możliwe) linie, które są puste po wydrukowaniu.
dlaczego dodajesz 1 do '$ # lines'? – sergio
Nie wiedząc, jaki jest wzór, nie mamy wiele okazji do zrozumienia, dlaczego pasuje on do "pustej" linii. Należy jednak pamiętać, że linie kończą się \ n, co jest liczone jako coś do dopasowania. I w rzeczywistości niektóre wzory mogą w ogóle nie pasować do niczego. – DavidO
@sergio, ponieważ '$ # lines' podaje indeks ostatniego elementu tablicy (który jest długością - 1 od 0) – Lazer