Warum willst Du dafür überhaupt eine Pipe benutzen?
wc kann Dateien auch selber lesen!
Ansonsten sollte man $a nicht als normale Variable verwenden.
Sie ist vordefiniert und eigentlich für den Einsatz beim Sortieren gedacht.
Dann ist system() auch der falsche Befehl dafür. Er liefert Dir den Exitcode des ausgeführten Kommandos zurück, nicht seine Ausgabe.
1
2
3
4
5
6
7
8
9
10
11
12
use strict;
use warnings;
my $lines = qx{ wc -l test.txt };
my $lines = 0;
open my $fh, '<', 'test.txt' or die "test.txt: open failed: $!\n";
$lines++ while ( <$fh> );
close $fh;
edit/Nachtrag:
Was mir gerade erst auffällt:
Du willst
cat test.txt | wc -l mittels Backticks ausführen lassen und das erhaltene Resultat (die Zeilenanzahl) als Kommando von
system() ausführen lassen? Und das auch noch ohne abschließendes Semikolon...
Ich wär froh, daß da ein Syntaxfehler geworfen wurde ;o)
Mir scheint, Dir ist nicht wirklich klar, was Du da eigentlich tun willst/musst...
Also entweder system() oder exec() ODER Backticks oder qx{};
Je nachdem, was Du machen willst, nimmst Du das entsprechende.
system() führt ein Kommando aus und liefert den Exitcode zurück.
exec() führt ein Kommando aus; Mit Ausführung ist das Skript "beendet" (einfach ausgedrückt).
qx{} und Backticks sind netterweise austauschbar und liefern die Ausgabe des ausgeführten Kommandos; qx{} ist dabei klarer zu lesen.
perldoc -f system
perldoc -f exec
perldoc perlop; /`STRING`
perldoc -f qx
Übrigens bietet das "Perl Kochbuch" im Kapitel 8.2. (Counting Lines (or Paragraphs or Records) in a File) genau zu diesem Thema Lösungen...
Last edited: 2009-03-22 21:40:06 +0100 (CET)
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!