STDIN 行から空白行または EOF までのすべての行を収集するにはどうすればよいですか。次のようになります。
 my @lines;
 while(<> ne EOF || <> not blank) {
      chomp;
      push(@lines, $_);
 }
    EOFまたは空白行の入力の読み取りを停止するには、次のソリューションをお勧めします。
while (<>) {
    last unless /\S/;
    # do something with $_ here...
}
mobのソリューションとは異なり、これはEOFでの「パターン一致(m //)での初期化されていない値$_の使用」に関する警告を表示しません。
「空白」行が文字を含まないことを意味する場合は、改行\n(Unix)または\r\n(Windows)のみを使用し、
my @lines;
/^$/ && last, s/\r?\n$//, push(@lines, $_) while <>;
(このデモを参照してください)
「空白」行の中に、などの空白をいくつでも含める必要がある場合は"         "、次を使用します。
my @lines;
/^\s*$/ && last, s/\r?\n$//, push(@lines, $_) while <>;
    これはEOFのみをチェックします:
while (<>) {
    s/\s+\z//;
    push @lines, $_;
}
したがって、空白行のチェックを追加する必要があります。
while (<>) {
    s/\s+\z//;
    last if $_ eq "";
    push @lines, $_;
}
あるいは、
while (<>) {
    s/\s+\z//;
    push @lines, $_;
}
の略です
while (defined( $_ = <> )) {
    s/\s+\z//;
    push @lines, $_;
}
したがって、条件内のwhile条件全体が必要な場合は、次を使用します
while (defined( $_ = <> ) && /\S/) {
    s/\s+\z//;
    push @lines, $_;
}
    EOF または空白行で改行するには:
while ( ($_ = <>) =~ /\S/ ) {
   chomp;
   push @lines, $_;
}
/\S/入力に非空白が含まれているかどうかをテストします。