Hm, du zählst nur Nicht-Whitespaces... aber die müssen schon auch gezählt werden, oder?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!perl
use strict;
use warnings;
my @prog = grep -f, @ARGV;
@ARGV = grep !-f, @ARGV;
foreach my $prog (@prog) {
my $code = `perl -MO=Deparse,-sC,-p $prog`;
my $eingabe = ($code =~ /[\$\@]ARGV/) ? 'ARGV' : 'STDIN';
open (DATEI,$prog);
chomp (my $shebang = <DATEI>);
my $inhalt = join '', <DATEI>;
close (DATEI);
$inhalt =~ s/(?<![\w\$])#.*?$//gm;
$inhalt =~ s/(?:^[\s\n]+|[\s\n]+$)//gs;
my ($pp) = ($shebang =~ /^#!.*? ([^#]*)/);
$pp =~ s/\s+$//;
my $zeichen = length($inhalt) + length($pp||''); # Zeichen = Inhalt + Parameter nach "#!...perl "
print $zeichen, " Zeichen...\n";
print $eingabe eq 'ARGV' ? `perl $prog @ARGV` : `echo @ARGV|perl $prog`;
print "\n\n";
}
Die Kommentare einfach vergessen, das Ding war mal noch ein wenig länger, weil ich erst via eval den Code von B::Deparse ausführen wollte, und dazu mußte ich noch ein tie über STDIN klatschen und dafür sorgen, dass der Code auch paßt...
Aufrufen z.B. mit
perl blablabla.pl rdw05_foo.pl rdw05_bar.pl ... abcd, gibt für jedes Script die Ausgabe aus + die Anzahl der Zeichen. :)
Edit: Einrückungen angepaßt und Kommentare gelöscht
Edit: Bugfix die erste...\n\n
<!--EDIT|DS|1092053897-->