Hallo zusammen,
On Freitag 10 April 2009, Sebastian Reinhardt wrote:
aber ich wollte eben doch mal mit Perl anfangen.
Das ist löblich, mit Perl anzufangen. :) Übrigens, eine # leitet
einen Kommentar ein. Das ist sehr hilfreich, wenn man andere
Leute fragt. ;) Ein wenig besser imho (allerdings alles
ungetestet):
#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use String::SetUTF8;
use 5.010;
#Was machen die Punkte da?
#........
my $result = opendir(DIR,"$dir0");
#......
my @eintraege = readdir(DIR);
# Der handler kann schon hier geschlossen werden.
# Wozu noch den Speicher belegen, wenn er nicht mehr
# gebraucht wird?
closedir(DIR);
# Den header früh zu schicken ist ok.
# Aber dort zwischen dem opendir() und dem Benutzen des
# handlers hat mir das nicht gefallen. Das macht Code
# schwerer lesbar.
print header();
foreach(@eintraege)
{
setUTF8($_);
}
@eintraege = sort @eintraege;
$i = 0;
# Ich löschen . und .. gleich aus dem Array
shift(@eintraege);
shift(@eintraege);
foreach(@eintraege)
{
$mimeicon = "../Bilder/SysIcons/inode-directory.png";
$dir2 = "$dir0$_";
my %datum = &LastModified($dir2);
# Nun kann ich auch einfach nur testen, ob es ein
# Verzeichnis ist.
#if ( -d $dir2 and $i > 1 )
if ( -d $dir2 )
{
# Unschön formatiert. Statt der vielen \n,
# die später das HTML hübscher machen,
# solltest Du lieber Deinen Quellcode
# hübsch gestalten. ;)
# Aber zu Deiner eigentlichen Frage:
# Der slash am Ende des Links
# störte. Also nicht $dir2/, sondern nur
# $dir2. Jedenfalls dann, wenn Du die
# Variable $dir0 aus param('Seite') speist.
# Die fehlenden " habe ich auch gleich
# ergänzt.
print "<tr>\n
\n</td>\n | \n\n</td>\n<td>\n$_</a>\n</td>\n | -\n</td>\n | \n$datum{Day}.$datum{Month}.
$datum{Year}</td>\n | \n$datum{Hour}:$datum{Minute}:
$datum{Second}\n</td>\n</tr>\n";
# Das Element ist verarbeitet. Also kann es weg.
# Damit wird das nächste foreach schneller.
splice(@eintraege,$i,1)
}
else {
# Der Zähler darf nur verändert werden, wenn das
# Element nicht verarbeitet und somit nicht
# gelöscht wurde. Wurde es gelöscht, dann hat
# das nächste Element wieder den Index des
# gerade gelöschten.
$i++;
}
}
# Wozu dieser Zähler?
# $i = 0;
# Ein hash für die mimeicons
my %mimeicons (
"pdf"=>"../Bilder/SysIcons/application-pdf.png",
"doc"=>"../Bilder/SysIcons/application-vnd.oasis.opendocument.text.png",
"ppt"=>"../Bilder/SysIcons/application-vnd.oasis.opendocument.presentation.png",
"gif"=>"../Bilder/SysIcons/image-gif.png",
"jpg"=>"../Bilder/SysIcons/image-jpeg.png",
"png"=>""../Bilder/SysIcons/image-png.png",
)
foreach(@eintraege)
{
# Hat das einen Grund, warum Du der Variablen hier
# einen Wert zuweist? Der wird doch weiter unten
# sowieso geändert.
$mimeicon = "../Bilder/Button/gruener_Punkt.gif";
$dir2 = "$dir0$_";
$size = -s "$dir2";
my %datum = &LastModified($dir2);
if ( -f $dir2 )
{
# Bist Du Dir sicher, dass da immer
# nur ein Punkt im Dateinamen ist?
# Ich wäre da vorsichtiger. Und warum
# $eintraege[$i] und nicht $_?
#($dummy, $mimet) = split(/\./
# $eintraege[$i]);
$mimet = $_;
$mimet = s/.*\.(.*)$/$1/; # Ungetestet
# Ein Hash ist hier übersichtlicher
# und leichter und pflegen.
$mimeicon = "";
$mimeicon = $mimeicons{'$mimet'};
if(!$mimeicon) {
$mimeicon = "../Bilder/SysIcons/unknown.png"
}
# given( $mimet )
# {
# when( $mimet eq "pdf" ) { $mimeicon
# =
# "../Bilder/SysIcons/application-pdf.png"; break }
# when( $mimet eq "doc" ) { $mimeicon
# =
# "../Bilder/SysIcons/application-vnd.oasis.opendocument.text.png";
# break }
# when( $mimet eq "ppt" ) { $mimeicon
# =
# "../Bilder/SysIcons/application-vnd.oasis.opendocument.presentation.png";
# break }
# when( $mimet eq "gif" ) { $mimeicon
# =
# "../Bilder/SysIcons/image-gif.png"; break }
# when( $mimet eq "jpg" ) { $mimeicon
# =
# "../Bilder/SysIcons/image-jpeg.png"; break }
# when( $mimet eq "png" ) { $mimeicon
# =
# "../Bilder/SysIcons/image-png.png"; break }
# default { $mimeicon =
# "../Bilder/SysIcons/unknown.png"; break }
# }
print "<tr>\n | \n</td>\n | \n</td>\n<td>\n$_</a>\n</td>\n | \n$size\n</td>\n | \n$datum{Day}.$datum{Month}.
$datum{Year}</td>\n | \n$datum{Hour}:$datum{Minute}:
$datum{Second}\n</td>\n</tr>\n";
}
# $i++;
}
Ich hoffe, das stimmt alles so. Viel Spaß noch beim Kodieren.
Liebe Grüße
Erik
--
"Toleranz kann man von den Rauchern lernen. Noch nie hat sich ein
Raucher über einen Nichtraucher beschwert."
Alessandro Pertini
%
Erik P. Roderwald * Uhlenhoffweg 18 * 21129 Hamburg
Telefon: +49 (0)40 8510 3150 * Fax: +49(0)40 8510 3148
http://www.zigarren-rollen.de
--
Um die Liste abzubestellen, schicken Sie eine Mail an:
opensuse-de+unsubscribe@opensuse.org
Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken
Sie eine Mail an: opensuse-de+help@opensuse.org
|