Похоже, вы не используете строгие и предупреждения . Используйте их, тем более что вы не знаете Perl, возможно, вы захотите добавить диагностика в список обязательных прагм.
Вы отслеживаете номер строки ввода в отдельной переменной $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 '=';
}
}