Как вернуться на одну строку назад с Perl - PullRequest
2 голосов
/ 12 января 2011

Может кто-нибудь сказать мне, как в Perl можно вернуться на одну строку назад в Perl, когда вы перебираете текстовый файл.В случае, если я вижу текст в строке и узнаю его, и если он распознается как определенный шаблон, я хотел бы вернуться к предыдущей строке, выполнить некоторые действия и продолжить.

Заранее спасибо.

Ответы [ 2 ]

13 голосов
/ 12 января 2011

Обычно вы не возвращаетесь, вы просто следите за предыдущей строкой:

my $previous; # contents of previous line
while (my $line = <$fh>) {
    if ($line =~ /pattern/) {
        # do something with $previous
    }
    ...
} continue {
    $previous = $line;
}

Использование блока continue гарантирует, что копия будет сделана, даже если вы пропустите частьтело цикла через next.

Если вы хотите по-настоящему перемотать, вы можете сделать это с seek и tell, но это более громоздко:

my $previous = undef;    # beginning of previous line
my $current  = tell $fh; # beginning of current line
while (my $line = <$fh>) {
    if ($line =~ /pattern/ && defined $previous) {
        my $pos = tell $fh;      # save current position
        seek $fh, $previous, 0;  # seek to beginning of previous line (0 = SEEK_SET)
        print scalar <$fh>;      # do something with previous line
        seek $fh, $pos,  0;      # restore position
    }
    ...
} continue {
    $previous = $current;
    $current  = tell $fh;
}
7 голосов
/ 12 января 2011
my $prevline = '';
for my $line (<INFILE>) {

    # do something with the $line and have $prevline at your disposal

    $prevline = $line;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...