Perl - Sammeln Sie alle von STDIN, bis leere Zeile oder EOF
Wie kann ich Sie sammeln alle Zeilen von STDIN Zeilen, bis eine leere Zeile oder EOF, je nachdem, was zuerst kommt. Es würde so Aussehen:
my @lines;
while(<> ne EOF || <> not blank) {
chomp;
push(@lines, $_);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Pause auf EOF oder eine leere Zeile:
/\S/
testet, ob die Eingabe enthält alle nicht-whitespace-Zeichen.while( defined($_ = <>) and /\S/ ){...}
wäre besser.Mehr Lesen Eingabe auf EOF oder eine leere Zeile, würde ich lieber diese Lösung:
Im Gegensatz zu Mobil-Lösung, diese wird es nicht geben eine Warnung über "Use of uninitialized value $_ in pattern match (m//)" EOF.
Wenn "leere" Zeile bedeutet, dass keine Zeichen innerhalb von nur new-line
\n
(Unix) oder\r\n
(Windows), verwenden Sie dann(siehe diese demo)
Wenn "leere" Zeile sollte eine beliebige Anzahl von white-space-innen, wie
" "
, dann verwenden SieDiese wird nur prüfen, für EOF:
So müssen Sie eine Prüfung auf leere Zeilen:
Alternativ
ist die Abkürzung für
also, wenn Sie wollte, dass die ganze Bedingung in der
while
Bedingung, die Sie verwenden würden,chomp
für mich./\S/
klarer wäre als!/^\s*\z/