SELFHTML Forums-Auslese CGI und Perl


Forums-Auslese
Perl: Sonstiges

Diese Seite ist ein Dokument mit Informationstext

 Wie kann man mit Perl kaufmännisch runden?
 Wie gibt man mehrere Zeilen HTML auf einmal aus?
 "Illegal character \015 (carriage return) in ...": Zeilenumbrüche in Perl-Skripts

 

Wie kann man mit Perl kaufmännisch runden?

Basierend auf einem Forums-Beitrag vom 17.11.1998 von:
 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  Perl-FAQ.

 

Wie gibt man mehrere Zeilen HTML auf einmal aus?

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

Wenn Sie in einem Perl-Skript mehrere Zeilen auf einmal ausgeben wollen, ohne jedesmal 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.

 

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

Basierend auf einem Forums-Beitrag vom 1.09.1998 von:
 Markus Schaber, markus.schaber@student.uni-ulm.de
 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  TextPad oder - speziell für Web-Dokumente -  Homesite.

weiter: Formularauswertung
zurück: Perl: Datei-Handling
 

SELFHTML Forums-Auslese CGI und Perl

© 1999  das Redaktionsteam