strictとwarningsを使用していないようです。特に Perl を知らないので、必ず使用するプラグマのリストに診断を追加することもできます。
別の variable で入力行番号を追跡しています$i
。Perl には、perlvarに記載されているさまざまな組み込み変数があります。これらのいくつかは、$.
非常に便利です。
ループmy($line) = $_;
の本体で使用しています。while
代わりに、のように直接に$_
割り当てを避けてください。$line
while ( my $line = <$input> )
などのベアワード ファイルハンドルINPUT
はパッケージ グローバルであることに注意してください。ファイルハンドルを除いて、レキシカルファイルハンドルを使用して、ファイルハンドルの範囲を適切に制限するDATA
方がよいでしょう。
投稿の__DATA_
セクションにサンプル データを含めて、他のユーザーが追加作業なしでコードをコピー、貼り付け、実行できるようにします。
=
これらのコメントを念頭に置いて、以下を使用して始まらないすべての行を印刷できます。
#!/usr/bin/perl
use strict; use warnings;
while (my $line = <DATA> ) {
my $first_char = substr $line, 0, 1;
if ( $first_char ne '=' ) {
print "$.:$first_char\n";
}
}
__DATA__
=
=
a
=
+
ただし、次のように書きたいと思います。
while (my $line = <DATA> ) {
# this will skip blank lines
if ( my ($first_char) = $line =~ /^(.)/ ) {
print "$.:$first_char\n" unless $first_char eq '=';
}
}