SELFHTML

Forums-Auslese
Perl: Sonstiges

Diese Seite ist ein Dokument mit Informationstext

nach unten Wie kann man mit Perl kaufmännisch runden?
nach unten Wie gibt man mehrere Zeilen HTML auf einmal aus?
nach unten "Illegal character \015 (carriage return) in ...": Zeilenumbrüche in Perl-Skripts
nach unten Neuer Beitrag in der Forums-Auslese Verwendung von nicht-installierten Perl-Modulen
nach unten Neuer Beitrag in der Forums-Auslese Konvertierung von verschiedenen Zeitangaben

nach unten 

Wie kann man mit Perl kaufmännisch runden?

Basierend auf einem Forums-Beitrag vom 17.11.1998 von:
E-Mail Jörk Behrends, jbehrends@abstrakt.de

In Perl gibt es keine Funktion, die auf diese Weise rundet. Sie können sich aber eine Rundungsfunktion selbst schreiben. Achtung: Kommazahlen in Perl müssen mit einem . (Punkt) statt einem , (Komma) angegeben werden, z.B. 3.75624.

Beispiel:

$ungerundet = 3.75624;
$gerundet = &round($ungerundet);   # ergibt 4

sub round
{
  my $zahl = shift;
  $zahl = int($zahl + 0.5);
  return $zahl;
}

Erläuterung:

Sie können die Funktion mit &round($ungerundet); aufrufen. Als Rückgabewert erhalten Sie die gerundete Zahl. Zum Runden wird einfach 0.5 addiert, dann werden die Nachkommastellen abgeschnitten.
Wollen Sie auf eine andere Stelle runden, können Sie den Wert vorher entsprechende multiplizieren, damit die ganzzahlige Rundung wieder einsatzfähig ist, beispielsweise mit 100 für zwei Nachkommastellen.

Beispiel:

$ungerundet = 3.75624;
$gerundet = (&round($ungerundet * 100)) / 100;   # ergibt 3.76

sub round
{
  my $zahl = shift;
  $zahl = int($zahl + 0.5);
  return $zahl;
}

Eine zweite Möglichkeit

Eine weitere Möglichkeit zum Runden ist die Funktion sprintf. Diese verwendet einen Formatstring, der einen Platzhalter für eine Fließkommazahl enthält. Als weiteren Parameter enthält sie den einzusetzenden Wert (also die zu rundende Zahl). Der Platzhalter im Formatstring für Fließkommazahlen ist %X.Yf. X steht für die Mindestanzahl der Vorkommastellen, Y für die zu verwendenden Nachkommastellen.

Beispiel:

$ungerundet = 3.75624;
$gerundet = sprintf("%0.4f", $ungerundet);

Eine dritte Möglichkeit

Sie können auch mit regulären Ausdrücken eine Zahl runden. Dabei betrachten Sie die Zahl aber nicht als Zahl, sondern als String. Da diese Möglichkeit jedoch eher unübersichtlich ist, sollten Sie wenn möglich eine der obigen Varianten verwenden.

Beispiele:

# Um nur die ersten beiden Stellen auszugeben
$zahl =~ s/\.(\d{0,2})\d*/\.$1/;

# Um die Nachkommastellen mit Nullen aufzufüllen
$zahl =~ s/\.(\d{0,2})\d*/substr(".${1}00", 0, 3)/e;

# Um auch Zahlen ohne Komma mit zwei Nachkommastellen darzustellen
$zahl =~ s/(?:(\.\d{0,2})\d*)?$/substr("${1}00", 0, 3)/e;

Informationen zum Runden in Perl finden sich auch in der englischsprachige Seite Perl-FAQ.

nach obennach unten 

Wie gibt man mehrere Zeilen HTML auf einmal aus?

Basierend auf einem Forums-Beitrag vom 28.10.1998 von:
E-Mail Frank Schönmann, fs@tower.de
E-Mail Jörk Behrends, jbehrends@abstrakt.de

Wenn Sie in einem Perl-Skript mehrere Zeilen auf einmal ausgeben wollen, ohne jedes Mal ein print davor zu setzen, bietet sich die folgende Möglichkeit an. Das ganze nennt sich "Hier-Dokument" (engl. "here-document").

Beispiel:

print <<'EOT';
Content-type: text/html

<html>
<head>
...
</head>
<body>
...
</body>
</html>
EOT

Erläuterung:

Perl erkennt alles zwischen der print <<'EOT'-Answeisung und dem String EOT als auszugebenden Text. Selbst Zeilenumbrüche in dem Text werden als solche erkannt. Diese Funktionsweise kann man am ehesten mit dem <pre>-Tag in HTML vergleichen. Wichtig ist auch der abschließende Zeilenumbruch nach dem EOT.
Verwenden Sie statt der obigen Version ein print <<"EOT", werden Sonderzeichen im Text als solche erkannt und Variablen interpoliert. Der Name der Textmarke, hier EOT, ist frei wählbar.

nach obennach unten 

"Illegal character \015 (carriage return) in ...": Zeilenumbrüche in Perl-Skripts

Basierend auf einem Forums-Beitrag vom 1.09.1998 von:
E-Mail Markus Schaber, markus.schaber@student.uni-ulm.de
E-Mail Stefan Münz, muenz@csi.com

In der Datei steht an dieser Stelle ein "Carriage Return" (ASCII-Wert: 15) als Zeilenumbruch. Allerdings wird nur von Windows die Zeichenkombination "Carriage Return"-"Line Feed" zu diesem Zweck verwendet. Perl-Interpreter, die diese Tatsache nicht beachten, finden am Ende der Zeile nur ein unbekanntes Zeichen, das als Fehler angesehen wird. Entfernen können Sie die "Carriage Returns", indem Sie mit dem Befehl recode die Datei neu von Windows nach Unix kodieren.
Um von vorneherein sicher zu gehen, sollten Sie - auch unter Windows - Perl-Skripts immer im Unix-Format abspeichern. Windows-Editoren, die dies unterstützen, sind zum Beispiel englischsprachige Seite TextPad oder - speziell für Web-Dokumente - englischsprachige Seite Homesite.

nach obennach unten 

Verwendung von nicht-installierten Perl-Modulen

Basierend auf einem Forums-Beitrag vom 03.03.1999 von:
E-Mail Frank Schönmann, fs@tower.de

Möchte man Perl-Module verwenden, die nicht standardmäßig auf dem Server installiert sind, der Provider diese aber auch nicht nachträglich installieren will, bleibt immer noch die Möglichkeit, die betreffenden Module lokal in seinem eigenen Homeverzeichnis zu installieren. Alles was man dazu benötigt, ist etwas Speicherplatz und einen Telnet-Zugang.
Die Installation der Module erfolgt nicht durch einfaches kopieren, sondern durch ein Skript (Makefile.PL), das eine Datei mit Anweisungen für das Kommando make erstellt. Mit diesem Skript kann man über den Parameter PREFIX das Verzeichnis festlegen, in dem später die Module liegen. Durch Aufruf des Programms make werden dann benötigte Dateien erstellt und konfiguriert, durch ein folgendes make install werden alle Dateien in die entsprechenden Verzeichnisse kopiert.

Normaler Ablauf einer vollständigen Installation:

tar xvfz dateiname.tar.gz                           Entpacken der Datei
cd dateiname                                        Verzeichniswechsel
perl Makefile.PL PREFIX=/home/benutzername/perl     Konfiguration der Makefiles
make                                                Erstellung benötigter Dateien
make install                                        Installation durch Kopieren der Dateien

Verwendung der so installierten Module:

Die Einbindung der Module erfolgt genauso wie bei normal im System installierten Modulen mit use. Zusätzlich muss jedoch noch der Pfad, in dem die lokal installierten Module liegen, in die Liste der Modul-Verzeichnisse aufgenommen werden.

use lib '/home/benutzername/perl/site_perl/lib';    Verzeichnis zur Liste der Modul-Pfade hinzufügen
use Installiertes::Modul;                           Modul einbinden

nach obennach unten 

Konvertierung von verschiedenen Zeitangaben

Basierend auf einem Forums-Beitrag vom 16.01.1999 von:
E-Mail Jörg Wittemeier, info@goby.net
E-Mail Cheatah, Hajo@hadiko.de
E-Mail Frank Schönmann, fs@tower.de

Vor allen Dingen unter Unix/Linux stehen die beiden folgenden Zeitangaben zur Verfügung: Anzahl der Sekunden seit dem 01.01.1970 und Angabe der Zeit in einer lesbar(er)en Form (z.B. Fri Jun 20:29:11 1997). Um diese beiden verschiedenen Arten der Zeitangabe unter Perl ineinander zu konvertieren, empfehlen sich die folgenden Möglichkeiten.

Sekunden nach DMYHMS

Diese Aufgabe kann ganz einfach mit der Funktion localtime gelöst werden, die extra für diesen Zweck geschaffen wurde.

($sek, $min, $std, $mtag, $mon, $jahr, $wtag, $jtag, $ismrzeit) = localtime($sekunden);

DMYHMS nach Sekunden

Die umgekehrte Konvertierung ist am schnellsten über ein mitgeliefertes Modul möglich.

use Time::Local;
$sekunden = timelocal($sek, $min, $std, $mtag, $mon, $jahr);

nach oben
weiter:Weiter Seite Formularauswertung
zurück:Zurück Seite Perl: Datei-Handling
 

© 2000 Seite das Redaktionsteam