use Fcntl qw(SEEK_SET); open my $fh, "+<", "fileblock" or die $!; my @store = (0,0,0); my $tell = 0; while(<$fh>) {  if (m/^ttttt$/) {    # zur gemerkten position seek()en    seek $fh, $store[0], SEEK_SET;    # zu löschenden block einlesen    for (0..8) {      <$fh>;    }    # rest einlesen    my @rest = <$fh>;    # wieder zurückkehren    seek $fh, $store[0], SEEK_SET;    # alles ab hier abschneiden    truncate $fh, $store[0];    # und den rest schreiben    print $fh @rest;  }  else {    # queue, die sich die positionen der letzten drei zeilen merkt    shift @store;    push @store, $tell;  }  $tell = tell $fh; } close $fh;