Sehr Umfangreiche Webseite zum Programmieren in C Perl CGI, Skripting, Konvertieren, int ceil sprintf hex oct floor Runden AbschneidenPerl Kurs Skripting Strings substr pack unpack Template Zeichen Substring Zeichenkette Konkatenation Konvertieren und Formatieren int ceil floor sprintf hex oct floor Perl Kurs Kapitel 5

5.1. Konvertierung - Strings in Zahl, Zahlen in Strings           zurück Ein Kapitel tiefer zum Inhaltsverzeichnis

Das gute an Perl ist, dass die Konvertierung von Strings in Zahlen und von Zahlen in Strings, automatisch funktioniert. Wollen Sie  Strings in Zahlen konvertieren ...

#!/usr/bin/perl -w

use strict;

my $string = "12345";
my $string2 = "2.4e7";
my $string3 = "     123";

print my $wert = $string * 2 , "\n";
print $wert = $string2 + 1, "\n";
print $wert = $string3 + 0, "\n";

Dies wird übrigens intern mit der C-Funktion atof() gemacht. An diesem Beispiel können Sie sehen, dass alle Strings richtig konvertiert wurden. Auch die Leerzeichen zu Beginn von 123 werden praktisch verschluckt. Ebenso Steuerzeichen wie \n, \t... werden ignoriert und stellen bei der Konvertierung kein Problem da. Falls Sie die Sprache C und die Funktion atof() kennen, wissen Sie ja, dass mit dieser Funktion die Hexdezimale und Oktale Zahlendarstellung nicht automatisch erkannt wird. Dafür können Sie die Funktionen hex(), octal() oder sprintf() verwenden.

Die Konvertierung von Zahlen in Strings läuft ebenso automatisch ab. Intern verwendet diese Konvertierung die sprintf() -Funktion. Hier ein paar Beispiele der Konvertierung von Zahlen in Strings ...

#!/usr/bin/perl -w

use strict;

my $n=100;
my $n2=3;
my $number=$n/$n2;

print "Ergebnis : $number" , "\n";

5.2. Runden und Abschneiden von Zahlen           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Um Zahlen zu Runden haben Sie mehrere Möglichkeiten. Sie können den dezimalen Teil mit der Funktion int() abschneiden ...

#!/usr/bin/perl -w

use strict;

my $number = 3.14;
my $num = 4.90;

print int($number) , "\n";   #wird zu 3
print int($num) , "\n";      #wird zu 4

An dieser Methode kann man sehen, dass einfach die letzte Stelle abgeschnitten wurde. Was ist aber, wenn man gerne bei der Zahl 4.90 auf den nächsten größeren Wert aufgerundet hätte?

Für das Aufrunden auf die nächste größere Zahl übernimmt uns die Funktion ceil() die Arbeit. Um diese Funktion verwenden zu können benötigen wir das POSIX-Modul (welches Sie bei MS-Systemen höchstwahrscheinlich nachinstallieren müssen) ...

#!/usr/bin/perl -w

use strict;
use POSIX;   #für ceil()

my $number = 3.14;
my $num = 4.90;

print ceil($number) , "\n";   #wird zu 4
print ceil($num) , "\n";      #wird zu 5

Und um die Zahl auf die nächste tiefere Ganzzahl abzurunden verwenden Sie am Besten die Funktion floor(), für die Sie ebenfalls das POSIX-Modul benötigen ...

#!/usr/bin/perl -w

use strict;
use POSIX;   #für floor()

my $number = 3.14;
my $num = 4.90;

print floor($number) , "\n";   #wird zu 3
print floor($num) , "\n";      #wird zu 4

5.3. sprintf()           zurück Ein Kapitel tiefer Ein Kapitel höher zum Inhaltsverzeichnis

Mit Hilfe von sprintf() können Sie Strings in verschiedensten Formaten anzeigen. Mit sprintf() gelten schon die selben Formatierungszeichen wie Sie bei der Funktion printf() kennen gelernt haben  ...

#!/usr/bin/perl -w

use strict;

print my $convert = sprintf "%c\n" , 65;    #A
print $convert = sprintf "%s\n" , 3.141592; #3.141592 als String
print $convert = sprintf "%d\n" , "12345";  #String2Dezimal
print $convert = sprintf "%o\n" , 123;      #Dezimal2Oktal
print $convert = sprintf "%x\n" , 255;      #Dezimal2Hexdezimal
print $convert = sprintf "%e\n" , 12000.10; #exp. Darstellung
print $convert = sprintf "%f\n" , "234.2333"; #String2Gleitkomma

Wie schon mit printf,  können Sie auch hier das Format erweitert formatieren ...

#!/usr/bin/perl -w

use strict;

print my $convert = sprintf "%.2f\n" , 3.141592;
print $convert = sprintf "%-10d\n" , "12345";
print $convert = sprintf "%5.2f\n" , "234.2333";
print $convert = sprintf "%#x\n" , 255;
print $convert = sprintf "%#o\n" , 255;

5.4. hex() und oct()           zurück Ein Kapitel höher zum Inhaltsverzeichnis

Um einen String in eine Hexdezimale oder Oktale Zahl zu konvertieren, verwenden Sie die Funktionen hex() und oct() ...

#!/usr/bin/perl -w

use strict;

my $zugriff = "0750";
my $adress= "0xff";

print oct($zugriff), "\n";   #488
print hex($adress), "\n";    #255

Mit diesen beiden Funktionen wandeln Sie Hex.- oder Oktalzahlen in Dezimalzahlen um. Und nicht wie man schnell annehmen würde umgekehrt. Die Funktion oct() wird nicht auf Richtigkeit der Oktalen Zahleneingabe überprüft. Dies machen wir am besten mit einem regulärem Ausdruck (mehr dazu Erfahren Sie in einem späteren Kapitel), der überprüft, ob der String mit '0' anfängt und keinem 'x' folgt ...

/^0[^x]\d*/

Wir wollen gleich ein kleines Beispiel schreiben, dass Strings in Hexdezimale oder als Oktale Zahlen ausgibt ...

#!/usr/bin/perl -w

use strict;

print "Bitte geben Sie ein Zahl in irgendeiner Form ihrer Wahl ein : ";
chomp($_=<>);

if(/^0[^x]\d*/){
  print "Die Zahl ist eine Oktale : $_ -> " . oct($_) . "\n";
  }
elsif(/^0x\d*/){
  print "Die Zahl ist eine Hexdezimale : $_  -> " . hex($_) . "\n";
  }
else{
  print "Sie gaben ein : $_ \n";
  }

Hier haben wir reguläre Ausdrücke verwendet, um zwischen Oktaler und Hexdezimaler oder auch keiner der beiden Zahlendarstellungen, als Strings unterscheiden können.

Hinweis: Auch wenn Ihnen in diesem Kapitel einiges nicht so klar erscheint (reguläre Ausdrück, for-Schleife ...), müssen Sie nicht verzweifeln. Zu diesen Themen kommen wir noch zu sprechen.