Eine kleine Spielerei, um festzustellen, mit welchen Dateitypen man sich grad seine Festplatte vollgemĂÂŒllt hat:
`
############################################################
# extcnt.pl: Welche Dateitypen verbrauchen wieviel Plattenplatz?
############################################################
use strict;
use File::Find;
my $Bytes;
my %ExtSizes;
############################################################
# Ausgabe: AbschnittsĂÂŒberschrift
############################################################
sub print_head
{
print "-" x 46, "\n";
print $_, "\n";
printf("%-22s %22s\n", "Dateiendung", "Bytes");
print "-" x 46, "\n";
}
############################################################
# Ausgabe: Ergebnisliste
############################################################
sub print_body
{
for(sort { $ExtSizes{$a} <=> $ExtSizes{$b} } keys %ExtSizes)
{
my $endung = $_;
my $verbrauch = $ExtSizes{$_};
printf("%-22s %22s\n", $endung, $verbrauch);
}
}
############################################################
# Ausgabe: Ergebnisabschluss
############################################################
sub print_tail
{
print "-" x 46, "\n";
printf("%-22s %22s\n\n", "Summe:", $Bytes);
}
############################################################
# Dateiendung feststellen
############################################################
sub get_extension
{
my $fileext = $_;
if($_ =~ /\./)
{
# Juhu! Eine Datei mit .irgendwas dran.
$fileext =~ s/.*\.([^.]*)$/$1/;
$fileext = lc($fileext);
}
else
{
# Irgendwas ohne gescheite Extension
$fileext = 'Ohne Endung';
}
}
############################################################
# Dateigroessen feststellen + in Ergebnisliste schreiben
############################################################
sub extcount
{
unless (-f)
{
# bei Verzeichnissen abbrechen
return
};
my $fileext = get_extension();
# Eigenschaften der gefundenen Datei auslesen
my ($dev, $inode, $mode, $numlinks, $uid, $gid, $rdev, $size, $whatever)
= stat($_) or return;
$Bytes += $size; # Gesamtverbrauch aller Dateien
$ExtSizes{$fileext} += $size; # Verbrauch fuer diese Endung
}
############################################################
# Hauptprogramm
############################################################
if ($#ARGV < 0)
{
die "Bitte mindestens einen Pfad angeben!\n";
}
for(@ARGV)
{
$Bytes=0; # in jedem Verzeichnis bei 0 anfangen
undef %ExtSizes; # Leere Ergebnisliste
chomp;
if(! -d)
{
print "$_ wurde nicht gefunden oder ist kein Verzeichnis.\n\n";
next;
}
find(\&extcount, $_);
if($Bytes)
{
print_head();
print_body();
print_tail();
}
}
############################################################
# EOF
############################################################
`
for(sort { $ExtSizes{$b} bzw. fĂÂŒr Stringvergleiche „cmp“ verwendest, geht das schon.
Lustig, mein Comment ist zerschossen. Was ich eigentlich schreiben wollte, ist, dass sort eine dreiwertige Vergleichsfunktion erwartet, die -1, 0 oder 1 zurĂÂŒckgibt, je nachdem ob der linke Wert kleiner, gleich oder grösser als der rechte ist. wĂ€re der entsprechende Operator fĂÂŒr das, aber das kĂÂŒrzt deine Blogsoftware nun wohl wieder weg. đ
Meinst du <=> (den „Ufo-Operator“)? – Danke, damit klappt es. đ
Wenn du im Blog etwas eingeben willst, was spitze Klammern enthĂ€lt, musst du leider die entsprechenden HTML-Umschreibungen verwenden, also <=>. (Um das darstellen zu können musste ich wiederum &lt;=&gt; eingeben, wofĂÂŒr &amp;lt;=&amp;gt; erforderlich war, …)
Soso đ Eventuell wĂÂŒrde es helfen, wenn du den Input dieser Textbox durch CGI::escapeHTML behandeln wĂÂŒrdest (das Modul CGI ist eh vorinstalliert, eventuell muss es durch use CGI; geladen werden), also in etwa $input = CGI::escapeHTML($input);
Ich werd ’nen Teufel tun. đ WordPress ist viel zu komplex, als dass ich da mal eben am Code pfuschen wĂÂŒrde. Deinen Vorschlag hab ich ins Support-Forum geschrieben. Vielleicht wird er ja umgesetzt. FĂÂŒr’s erste kann man sich auch mit Backquotes behelfen: `< =>` Dummerweise haut WordPress jedesmal noch ein Leerzeichen dazwischen, aber immerhin kommt etwas lesbares dabei heraus.
Super, dann spielen wir mal ein bisschen Perlgolf:
sub get_extension
{
if (/\.([^\.]+)$/) {
return $1;
} else {
return ‚Ohne Endung‘;
}
}
Oder dann auch gleich als Einzeiler:
sub get_extension {
return /\.([^\.]+)$/ ? $1 : ‚Ohne Endung‘;
}
Jo, der Fragehaken-Operator ist mir auch aus LPC bekannt, und ich benutze ihn durchaus gern. Dass das $1 auch noch eine Anweisung weiter erhalten bleibt, wusste ich allerdings nicht. Wenn wir aber schon am Spielen sind:
sub get_extension
{
return /\.([^\.]+)$/ ? lc($1) : ‚Ohne Endung‘;
}
Zumindest unter Wind*** halte ich das fĂÂŒr sinnvoll.