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/
入力に非空白が含まれているかどうかをテストします。