Anna: Rückgabewert aus Jar-Archiv in Perl

Ich will ein Java-Programm von einem Perl-Skript aus aufrufen.
Ein Teil funktioniert auch, aber bei einer Methode bekomme ich einen Rückgabewert, den ich dann im Perl-Skript weiterverarbeiten will.

Mein Java-Programm ist so aufgebaut, dass es mehrere Dateien erstellt und jeweils die Zeilenlänge dazu. Alle Methoden sind in einem Jar-Archiv zusammengepackt. Die Dateien werden erstellt aber die wie kann ich die Zeilenlänge bekommen?
Die Zeilenlänge bekomme ich als Rückgabewert von der Methode Names.getLineLengthNames();
Sie liefert einen integer als Rückgabewert.
Diesen will ich im Perl-Skript aufrufen und anzeigen. Ich mache das folgendermaßen, aber es wird nichts angezeigt!Was mache ich denn da falsch?

open(PROG,"java -jar bagelExtractor.jar $inData $out1 $out2 $out3 $out4 $out5|");

@ausgabe;
while(<PROG>){
        push @ausgabe, $_;
}
close(PROG);

print <<HTML_END;

<table>
HTML_END

foreach(@ausgabe){

print <<HTML_END

<tr><td>$ausgabe</td></tr>
        HTML_END
}
close(PROG);
print <<HTML_END;

</table>
HTML_END

VielenDank,

Anna

  1. Diesen will ich im Perl-Skript aufrufen und anzeigen. Ich mache das folgendermaßen, aber es wird nichts angezeigt!Was mache ich denn da falsch?

    Was steht im Errorlog?

    open(PROG,"java -jar bagelExtractor.jar $inData $out1 $out2 $out3 $out4 $out5|");

    Ich mag mich täuschen, aber zwischen Programm und Pipe-Symbol gehört m.E. ein Leerzeichen.

    @ausgabe;

    <Gebetsmühle>
    Jedes Perlscript beginnt mit der Shebang gefolgt von

    use strict;  
    use diagnostics;
    

    </Gebetsmühle>

    denn dann würde Perl monieren, dass

    foreach(@ausgabe){
    [...]
      <tr><td>$ausgabe</td></tr>
    [...]        HTML_END
    }

    $ausgabe nicht definiert ist.

    Siechfred

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    1. Was steht im Errorlog?

      nichts

      open(PROG,"java -jar bagelExtractor.jar $inData $out1 $out2 $out3 $out4 $out5|");

      Ich mag mich täuschen, aber zwischen Programm und Pipe-Symbol gehört m.E. ein Leerzeichen.

      habe ein Leerzeichen reingeschrieben, aber es funktioniert leider trotzdem nicht.

      <Gebetsmühle>
      Jedes Perlscript beginnt mit der Shebang gefolgt von

      use strict;

      use diagnostics;

      
      > </Gebetsmühle>  
        
      ne die hab ich schon geschrieben, habe ich nur nicht mitgepastet.  
        
        
      Viele Grüße  
      Anna
      
      1. habe ein Leerzeichen reingeschrieben, aber es funktioniert leider trotzdem nicht.

        Fehlerabfrage mit open PROG, "$command |" or die $! gemacht? Hast du das Kommando mal ohne Perl in der Konsole aufgerufen? Kommt da das von dir erwaretete Ergebnis? Hast du $? geprüft (siehe Erläuterungen zu system()). Hast du dir @ausgabe mal anzeigen lassen (Data::Dumper ist als Standardmodul vorzüglich geeignet)?

        use strict;

        use diagnostics;

        
        > ne die hab ich schon geschrieben, habe ich nur nicht mitgepastet.  
          
        Das glaube ich dir nicht, da du @ausgabe ohne Angabe des Scopes definiert hast (siehe <http://perldoc.perl.org/functions/my.html>). Davon abgesehen:  
          
        ~~~perl
        foreach(@ausgabe){  
          print $ausgabe;  
        }
        

        wird nie funktionieren, da es keinerlei Abhängigkeit zwischen @ausgabe und $ausgabe gibt. Aus Perls Sicht ist $ausgabe im unkritischsten Fall ein leerer String. Was du willst, geht entweder so:

        foreach(@ausgabe){  
          print $_;  
        }
        

        oder so:

        foreach my $ausgabe (@ausgabe){  
          print $ausgabe;  
        }
        

        Siechfred

        --
        Ich bin strenggenommen auch nur interessierter Laie. (molily)