> Thomas Burkhardt <[EMAIL PROTECTED]> said:
> Greetings Perl Gurus!

> Using Perl, how do count the number of lines in a given file?
> 
> I know how to run the code:
> 
> open(MYPIPE, "|wc -l");
> print MYPIPE "apples\npears\npeaches\n";
> close MYPIPE;

If you want to simply print the number of lines in a file, you can do it with
the system() function. e.g.

system("wc -l $filename");

If you want to count the lines without help from the "wc" program, it looks 
like:

my $filename = "/etc/passwd";
my $count = 0;
open(IN, "<$filename") || die "cannot open $filename - $!\n";
while (<IN>) {
        $count++;
}
close IN;

print "$count\n";

Now if you want to open a file and shove it thru a filter it looks like:

my $filename = "/etc/passwd";
open(IN, "<$filename") || die "cannot open $filename - $!\n";
open(PIPE, "| wc -l") || die "cannot open pipe - $!\n";

while (<IN>) {
        print PIPE;
}
close IN;
close PIPE;

Note you can do this by slurping the entire file into an array, but that uses 
up memory with large files.  This version looks like:

my $filename = "/etc/passwd";
open(IN, "<$filename") || die "cannot open $filename - $!\n";
open(PIPE, "| wc -l") || die "cannot open pipe - $!\n";

print PIPE <IN>;

close IN;
close PIPE;

I prefer to read files line by line unless there is a specific reason to bring 
the entire file into memory.


-- 
Smoot Carl-Mitchell
Consultant




-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to