MudGuard: aus <INPUT> gelesene Zeile wieder zurückschieben

Hi,

ich lese per

while (<INPUT>)  
{  
#whatever  
}

Zeilen aus einem File und verarbeite sie.
Klappt wunderbar.

Das soll solange geschehen, bis die Zeile eine bestimmte Bedingung erfüllt. Auch noch kein Problem:

while (<INPUT>)  
{  
   last if (m/endeersterabschnitt/);  
   #whatever  
}

So, jetzt soll aber in einer zweiten Schleife der Rest des Files verarbeitet werden.

while (<INPUT>)  
{  
   last if (m/endeErsterAbschnitt/);  
   #whatever, 1st part  
}  
while (<INPUT>)  
{  
   #whatever, 2nd part  
}

Funktioniert im Prinzip ja auch. Die Experten unter Euch werden aber bemerkt haben, daß eine Zeile nicht bearbeitet wird - nämlich genau die, die die Bedingung "endeErsterAbschnitt" erfüllt.
Sollte die mit #whatever, 1st part bearbeitet werden, wär das ja auch kein Problem - einfach Verarbeitung und Abbruch der Schleife austauschen.
Soll sie aber nicht - die muß mit #whatever, 2nd part beackert werden.
Ok, das ginge ja auch noch - wenn es in Perl sowas wie do { } while gäbe.
Jetzt kommt's aber noch dicker:
Die erste Schleife wird nicht immer ausgeführt, sondern nur, wenn eine bestimmte Bedingung erfüllt ist.

Das gesamte Konstrukt sieht also so aus:

  
if (bedingung)  
{  
   while (<INPUT>)  
   {  
      last if (m/endeErsterAbschnitt/);  
      #whatever, 1st part  
   }  
        ###  
}  
while (<INPUT>)  
{  
   #whatever, 2nd part  
}

An der mit ### markierten Stelle müßte ich jetzt eigentlich die bereits gelesene Zeile wieder in INPUT zurückschieben können, so daß das nachfolgende <INPUT> sie noch findet.

Geht das irgendwie? Wenn ja, wie?
TIA,

cu,
Andreas

--
Warum nennt sich Andreas hier MudGuard?
Schreinerei Waechter
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  1. bin mir jetzt auch nicht ganz sicher, aber das sollte mit
    tell
    &
    seek
    gehen..
    mit tell die position des dateizeigers vor dem 1.part ermitteln
    und mit seek im 2. neu setzen...

    Gruß Markus

  2. Hallo,

    vielleicht hilft dir das weiter:

      
    if (1)  
    {  
      while (<DATA>)  
      {  
        last if /3/;  
        print;  
      }  
    }  
      
    print "--\n";  
      
    foreach ($_, <DATA>)  
    {  
      next unless defined;  
      print;  
    }  
      
    __DATA__  
    line1  
    line2  
    line3  
    line4  
    line5  
      
    
    

    für 0 ergibt es:
    --
    line1
    line2
    line3
    line4

    für 1:
    line1
    line2
    --
    line3
    line4
    line5
    gruss

    für 1 und if /6/:
    line1
    line2
    line3
    line4
    line5--

    gruss

    --
    no strict;
    no warnings;
    Terrorific!
    Given a cow full of milk, should the milk un-cow itself, or should the cow milk itself?
    1. Tag Eternius.

      if (1)
      [...]

      Wozu dieses if? Es funktioniert doch auch ohne.

      Siechfred

      1. Hi,

        if (1)
        [...]

        Wozu dieses if? Es funktioniert doch auch ohne.

        Das ist symbolisch für die Bedingung, unter der die erste While-Schleife stattfindet. Siehe Ursprungsposting.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. Hi,

      vielleicht hilft dir das weiter:

      if (1)
      {
        while (<DATA>)
        {
          last if /3/;
          print;
        }
      }
      print "--\n";
      foreach ($_, <DATA>)
      {
        next unless defined;
        print;
      }

        
      Danke.  
      Das tut zwar das, was ich will - aber irgendwie find ich das nicht so schön ...  
        
      cu,  
      Andreas
      
      -- 
      [Warum nennt sich Andreas hier MudGuard?](http://www.Mud-Guard.de/)  
      [Schreinerei Waechter](http://www.schreinerei-waechter.de/)  
        
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.  
      
      
      1. Hallo,

        Danke.
        Das tut zwar das, was ich will - aber irgendwie find ich das nicht so schön ...

        war schön eine Anforderung ;)

        gruss

        --
        no strict;
        no warnings;
        Terrorific!
        Given a cow full of milk, should the milk un-cow itself, or should the cow milk itself?
        1. Hi,

          Das tut zwar das, was ich will - aber irgendwie find ich das nicht so schön ...
            war schön eine Anforderung ;)

          nicht explizit, nur implizit ;-)

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo,

            Das tut zwar das, was ich will - aber irgendwie find ich das nicht so schön ...
              war schön eine Anforderung ;)
            nicht explizit, nur implizit ;-)

            Ah! Innere Schönheit also.

            Aber wer wird die in einem Perl-Script denn überhaupt bemerken?

            viele Grüße ;-))

            Axel