Rückgabewert aus Jar-Archiv in Perl
Anna
- 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
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
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
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