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";
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
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;
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.
|