Karle: Lineseperator Problem

Hi,

ich komme mal wieder nicht weiter ...

open (X, "$SSH $CMD 2>/dev/null |") or die "Can't run program: $!\n";  
        while (my $section = <X>)  
        {  
                print "BEGIN $section END\n";  
        }  

Ausschnitt:

BEGIN   Ausgabe 1
 END
BEGIN   Ausgabe 2
 END
BEGIN   Ausgabe 3
 END
BEGIN
 END
BEGIN   Ausgabe 1
 END
BEGIN     Ausgabe 2
 END
BEGIN   Ausgabe 3
 END
BEGIN
 END

Soweit so gut. Nun möchte ich aber innerhalb einer "Sektion" parsen, deshalb setze ich den lineseperator neu:

        open (X, "$SSH $CMD 2>/dev/null |") or die "Can't run program: $!\n";  
        my $oldlinesep = $/;  
        my $newlinesep = "\n\n";  
        $/ = $newlinesep;  
        while (my $section = <X>)  
        {  
                print "BEGIN $section END\n";  
        }

Ergebnis:
BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3

Ausgabe 1
Ausgabe 2
Ausgabe 3 END

Das ist nicht so gut, da ich ja gerne folgendes Ergebnis hätte:

BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3 END

BEGIN Ausgabe 1
Ausgabe 2
Ausgabe 3 END

Hat jemand eine Idee, wo mein Fehler liegt?

Danke.
Karle

  1. Hat jemand eine Idee, wo mein Fehler liegt?

      
    #!/usr/bin/perl -w  
    use strict;  
      
    local $/ = "\n\n";  
    while(<DATA>) {  
    	chomp;  
    	print "BEGIN $_ END\n";  
    }  
      
    __DATA__  
    Ausgabe 1  
    Ausgabe 2  
    Ausgabe 3  
      
    Ausgabe 1  
    Ausgabe 2  
    Ausgabe 3  
      
    Ausgabe 1  
    Ausgabe 2  
    Ausgabe 3
    

    Struppi.

    1. »» Hat jemand eine Idee, wo mein Fehler liegt?

      #!/usr/bin/perl -w
      use strict;

      local $/ = "\n\n";
      while(<DATA>) {
      chomp;
      print "BEGIN $_ END\n";
      }

      Ist immernoch folgendes Ergebnis:

      [code lang=perl]Ergebnis:
      BEGIN Ausgabe 1
      Ausgabe 2
      Ausgabe 3

      Ausgabe 1
      Ausgabe 2
      Ausgabe 3 END

        
      Ist die Leerzeile vielleicht gar kein \n? Kann man die Steuerzeichen irgendwie ausgeben? Mein OS ist Solaris.  
        
      Gruss  
      Karle
      
      1. Ist immernoch folgendes Ergebnis:

        Bei mir nicht.
        BEGIN Ausgabe 1
        Ausgabe 2
        Ausgabe 3 END
        BEGIN Ausgabe 1
        Ausgabe 2
        Ausgabe 3 END
        BEGIN Ausgabe 1
        Ausgabe 2
        Ausgabe 3 END

        Ist die Leerzeile vielleicht gar kein \n? Kann man die Steuerzeichen irgendwie ausgeben? Mein OS ist Solaris.

        Kann ich dir nicht sagen, da ich das nicht weiß.

        Struppi.

  2. Hi,

    BEGIN Ausgabe 1
    Ausgabe 2
    Ausgabe 3

    Ausgabe 1
    Ausgabe 2
    Ausgabe 3 END

    Das ist nicht so gut, da ich ja gerne folgendes Ergebnis hätte:

    Kann es sein, daß die Leerzeile zwischen Ausgabe 3 und Ausgabe 1 gar nicht leer ist, sondern vielleicht Leerzeichen/Tabs/sonstigen Whitespace enthält?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Kann es sein, daß die Leerzeile zwischen Ausgabe 3 und Ausgabe 1 gar nicht leer ist, sondern vielleicht Leerzeichen/Tabs/sonstigen Whitespace enthält?

      Ja, ist möglich und bin grad am überlegen, wie das rausfinden kann ...

      1. Hi,

        »» Kann es sein, daß die Leerzeile zwischen Ausgabe 3 und Ausgabe 1 gar nicht leer ist, sondern vielleicht Leerzeichen/Tabs/sonstigen Whitespace enthält?

        Ja, ist möglich und bin grad am überlegen, wie das rausfinden kann ...

        Schau Dir die Ausgabe mit einem Hex-Editor an.

        cu,
        Andreas

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

          »» »» Kann es sein, daß die Leerzeile zwischen Ausgabe 3 und Ausgabe 1 gar nicht leer ist, sondern vielleicht Leerzeichen/Tabs/sonstigen Whitespace enthält?
          »»
          »» Ja, ist möglich und bin grad am überlegen, wie das rausfinden kann ...

          Schau Dir die Ausgabe mit einem Hex-Editor an.

          open (X, "$SSH $CMD 2>/dev/null |") or die "Can't run program: $!\n";  
                  while (my $section = <X>)  
                  {  
                          if ($section =~ /^\s+\n$/) {print "YEAH";} else{print "BLOED"};  
                          print "BEGIN${section$END\n";  
                  }  
            
            
          Ausschnitt:  
            
          BLOEDBEGIN   Ausgabe 1  
          END  
          BLOEDBEGIN   Ausgabe 2  
          END  
          BEGIN   Ausgabe 3  
          END  
          YEAHBEGIN  
          END  
          BLOEDBEGIN   Ausgabe 1  
          END  
          BLOEDBEGIN   Ausgabe 2  
          END  
          BLOEDBEGIN   Ausgabe 3  
          END  
          YEAHBEGIN  
          END
          

          Wenn ich das richtig deute, dann sind da tatsächlich irgendwelche Leerzeichen drin - verdammt!

          1. hi,

            also ich hab das jetzt so gelöst um die Leerzeichen rauszubekommen (was auch klappt) ...

              
            while (my $section = <X>)  
            {  
            if ($section =~ /^\s+\n$/) {$section =~ s/ //g;push @tmparray,$section);}  
            else {push (@tmparray,$section);}  
            }
            

            Aber wie kann ich nun mein lineseparator gegen ein Array anwenden? Sowas geht nicht, soweit ich weiss. Muss ich die Daten jetzt extra in ein (temp)file schreiben um wieder ein Filehandle zu bekommen?

            Gruss Karle