home *** CD-ROM | disk | FTP | other *** search
- #!/usr/local/bin/perl
- # wc in Perl - Bjorn.Larsen@usit.uio.noo
-
- $l = 1;
- $w = 1;
- $c = 1;
-
- while (($#ARGV >= 0) && ($ARGV[0] =~ /^-(.*)/)) {
- $l = $w = $c = 0;
- for (split(//, $1)) {
- unless ($_ =~ /(l|w|c)/) {
- print "Usage: wc [-lwc] [files]\n";
- exit;
- };
- eval "\$$_ = 1";
- shift;
- };
- };
-
- if ($#ARGV < 0) {
- &count(STDIN);
- exit;
- };
-
- for (@ARGV) {
- open(F, $_);
- &count(F, $_);
- };
-
- if ($#ARGV > 0) {
- printf("%8d", $LINES) if $l;
- printf("%8d", $WORDS) if $w;
- printf("%8d", $CHARS) if $c;
- print(" total\n");
- };
-
- exit;
-
- sub count {
- local($fh, $f) = @_;
- local($chars, $words, $lines);
-
- while (<$fh>) {
- if ($c) {
- $chars += length;
- $CHARS += length;
- };
- if ($l) {
- $lines++;
- $LINES++;
- };
- if ($w) {
- s/^\s*//;
- $wc = split(/\s+/);
- $words += $wc;
- $WORDS += $wc;
- };
- };
-
- printf("%8d", $lines) if $l;
- printf("%8d", $words) if $w;
- printf("%8d", $chars) if $c;
-
- print(" $f") if $f;
-
- print "\n";
- }
-