Schrift
[thread]12947[/thread]

length() ergibt immer 0

Leser: 1


<< >> 8 Einträge, 1 Seite
styx-cc
 2009-01-01 23:30
#117531 #117531
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hallo, ich habe folgenden Quelltext:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl -w
use strict;

my $compiler    = 'g++';
my $file_input  = $ARGV[0];
my $file_output = $ARGV[1];

die "No input file given\n" unless $file_input;
die "No output file given\n" unless $file_output;

my $compile = `$compiler $file_input -o $file_output`;
print "$compile\nLength: ". length($compile) ."\n";


Und rufe das Script wie folgt auf:
Code: (dl )
perl comp-exe.pl five.c five


five.c sieht so aus und produziert einen Fehler, damit ich in Zeile 12 auch was zum Ausgeben habe:
Code: (dl )
1
2
3
4
5
6
7
#include <stdio.h>
int main()
{
it i; // must be int instead of it
for(i=1; i < 10000000; i++)
{printf("Wert von i: %d\n", i);}
}


Nun Frage ich mich, warum length(); mir immer 0 als Rügabewert liefert, denn wenn ich mir meine Ausgabe so anschaue, sollten das doch wesentlich mehr als 0 Zeichen sein:
Code: (dl )
1
2
3
4
5
6
five.c: In function »int main()«:
five.c:4: Fehler: »it« wurde in diesem Gültigkeitsbereich nicht definiert
five.c:4: Fehler: expected `;' before »i«
five.c:5: Fehler: »i« wurde in diesem Gültigkeitsbereich nicht definiert

Length: 0


Vielen Dank für die Hilfe im voraus.
Pörl.
pq
 2009-01-01 23:44
#117533 #117533
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
was steht denn in $compile drin?
wenn du STDERR nicht auf STDOUT umleitest, bekommst du evtl. gar keinen output, und nach
deinem beispiel zu folgern, bekommst du nur fehlermeldungen, vermutlich auf STDERR.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
styx-cc
 2009-01-01 23:49
#117534 #117534
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Code: (dl )
1
2
my $compile = `$compiler $file_input -o $file_output`;
print "$compile\nLength: ". length($compile) ."\n";


Das steht dann in $compile:
Code: (dl )
1
2
3
4
five.c: In function »int main()«:
five.c:4: Fehler: »it« wurde in diesem Gültigkeitsbereich nicht definiert
five.c:4: Fehler: expected `;' before »i«
five.c:5: Fehler: »i« wurde in diesem Gültigkeitsbereich nicht definiert


Und das mit der Umleitung von STDERR nach STDOUT versuche ich mal, wobei $compile ja eigentlich einen Inhalt hat und ich deswegen nicht so recht weiß wo ich da ansetzen soll...
Pörl.
Linuxer
 2009-01-02 00:02
#117535 #117535
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Woher weisst Du, dass $compile Inhalt hat?

Mit einer kleinen Anpassung der Printausgabe wird das sichtbar:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

my $compiler = 'g++';
my $file_in  = shift @ARGV;
my $file_out = shift @ARGV;

my $out = qx( $compiler $file_in -o $file_out );

print ">>>$out\nLength: ", length( $out ), "\n";


Code: (dl )
1
2
3
4
5
6
7
$ perl cp.pl a.c r.x
a.c: In function ‘int main()’:
a.c:4: error: ‘it’ was not declared in this scope
a.c:4: error: expected `;' before ‘i’
a.c:5: error: ‘i’ was not declared in this scope
>>>
Length: 0
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
styx-cc
 2009-01-02 00:14
#117536 #117536
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Das ist mir jetzt unangenehm, ich war der festen Überzeugung das vernünftig geprüft zu haben... danke.

Dann frage ich gleich mal wie ich STDERR nach STDOUT umleite, versucht habe ich es so:
Code: (dl )
1
2
3
4
5
6
7
stefan@stefan-laptop:~/development/c$ perl comp-exe.pl five.c five 2>&1
five.c: In function »int main()«:
five.c:4: Fehler: »it« wurde in diesem Gültigkeitsbereich nicht definiert
five.c:4: Fehler: expected `;' before »i«
five.c:5: Fehler: »i« wurde in diesem Gültigkeitsbereich nicht definiert
>>
Length: 0


$compile allerdings bleibt trotzdem leer.

MfG

edit: ausgabe hinzugefügt
Pörl.
Linuxer
 2009-01-02 00:21
#117537 #117537
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Du musst STDERR innerhalb des Skriptes umleiten; denn der Compileraufruf und sein STDERR ist unabhängig vom Aufruf des Perlskriptes und seines STDERR.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

my $compiler = 'g++';
my $file_in  = shift @ARGV;
my $file_out = shift @ARGV;

my $out = qx( $compiler $file_in -o $file_out 2>&1 );

print ">>>$out\nLength: ", length( $out ), "\n";


Code: (dl )
1
2
3
4
5
6
7
$ perl cp.pl a.c r.x
>>>a.c: In function ‘int main()’:
a.c:4: error: ‘it’ was not declared in this scope
a.c:4: error: expected `;' before ‘i’
a.c:5: error: ‘i’ was not declared in this scope

Length: 184
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
styx-cc
 2009-01-02 00:22
#117538 #117538
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Ahh, perfekt..
Eigentlich logisch, vielen Dank!
Pörl.
esskar
 2009-01-06 00:44
#117595 #117595
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
oder mit CPAN:IPC::Open3 arbeiten.
<< >> 8 Einträge, 1 Seite



View all threads created 2009-01-01 23:30.