Das mit den Array funktioniert so
my(@parts) = split(/([\s\n])/, $text);
d.h. beim Split werden durch die runden Klammern die Zeichen behalten (landen mit im Array) an denen man splittet.Mal abgesehen von deinen Code und ganz nach deiner Erlaeuterung hab ich folgendes:
Du willst zaehlen wie viel Buchstaben insgesamt in der Datei vorkommen und wie viele davon Groszbuchstaben sind:
my $count_chars = $text =~ tr/A-Za-z/A-Za-z/;
my $count_caps = $text =~ tr/A-Z/A-Z/;
Hier nutze ich ein Perlidiom zum zaehlen von Zeichen, tr ersetzt Zeichen (siehe perldoc perlop), kann aber auch zum Zaehlen von Zeichen genutzt werden, in den man als Ersetzungsliste die gleiche Liste wie die Suchliste nimmt.Die tr-Methode ist um einiges schneller als das zaehlen ueber die Mustererkennung (m//)!
Um jetzt nicht die ganze Datei in die $text-Variable lesen zu muessen, koennte das ganze dann so aussehen:
#!/usr/bin/perl use strict;
use warnings;
my($count_chars, $count_caps);
open(FH, '<', $0) or die $!;
while(<FH>) {
$count_chars += tr/A-Za-z/A-Za-z/;
$count_caps += tr/A-Z/A-Z/;
}
close(FH );
printf "Buchstaben insgesamt:\t%d\n", $count_chars;
printf "Groszbuchstaben:\t%d\n", $count_caps;
printf "Groszbuchstaben(%%):\t%d\n", $count_caps * 100 / $count_chars;
Grusz coax.
Datum: 07.02.2005-23:24
