2019-10-05T11:42:11
rostiMein Provider bietet mir
QuoteThis is perl 5, version 12, subversion 4 (v5.12.4) built for x86_64-linux
, da ist es schon OK dafür auf einem 5.16.3 zu entwickeln.
Oh je. Ich mag gar nicht wissen, welches museumsreife Linux mit Perl 5.12.4 läuft. Du kannst dafür entwickeln, mit welcher Version Du willst, aber daraus abgeleitete Empfehlungen haben bestenfalls historischen Wert.
2019-10-05T11:42:11
rostiUnd in meiner beruflichen Praxis musste ich mit der Abwärtskompatibilität sogar noch weiter runter gehen. So ist mein Framework abwärtskompatibel bis 5.6.1, abgesehen davon daß es auch in C und PHP 5.3.0 funktioniert.
Was auch immer der Kunde will...
2019-10-05T11:42:11
rostiEmpfehlungen richten sich stets nach Erfordernissen und dem was verfügbar ist.
In der Tat.
2019-10-05T11:42:11
rostiUnd was den Umgang mit der Zeichenkodierung betrifft, habe ich in den letzten Firmen wo ich angestellt war gesehen wie man es besser nicht machen sollte. Z.B. sämtliche Bytesequenzen die über CGI/1.1 reinkommen in UTF-8-kodierte Zeichen umwandeln obwohl man zum Insert nach MySQL die Kodierung gar nicht braucht und von daher die Kodierung wieder ausschalten muss.
Auch hier sollte man nicht aus der vergangenen fehlerhaften Behandlung von Unicode durch MySQL Empfehlungen für die Zukunft ableiten. Selbst MySQL kann inzwischen mit UTF-8 umgehen.
2019-10-05T11:42:11
rostiÜbrigens ist Latin1 auch nur eine Annahme was 0xC9 betrifft. charname LATIN CAPITAL LETTER E WITH ACUTE stimmt nämlich nur, wenn 0xC9 als Codepoint angenommen wird. Als Byte hingegen kann C9 auch ein ganz anderes Zeichen sein wenn man eine andere Kodierung annimmt:
use strict;
use warnings;
my $c = chr 0xC9;
print "Content-Type: text/plain; Charset=ISO-8859-5\n\n $c";
Perl interpretiert ein
0xC9 als
É. Ein LATIN CAPITAL LETTER E WITH ACUTE ist ein
É und kein
Щ. Wenn Du andere Kodierungen
annimmst, liegst Du bei Perl falsch.
2019-10-05T11:42:11
rostiMeine Empfehlung:
Zum Erzeugen utf8kodierter Zeichen Finger weg von der chr()-Funktion! Besser ist:
$c = pack "UU", 0xC9, 0x20AC;
weil das die utf8kodierten Zeichen direkt anhand des Codepoint erzeugt.
Das ist beides gruselig und nicht wirklich lesbar. Wenn man unbedingt UTF-8-Literale im Code braucht, dann geht das auch so:
Oder, viel besser lesbar, mit einer Quelldatei in UTF-8:
2019-10-05T11:42:11
rostiIm Übrigen habe ich geschriebe daß lc() und uc() nur mit kodierten Zeichen funktionieren. Mit Bytes hingegen funktionieren lc() und uc() nicht. Darüber müssen wir nicht streiten. Der von Dir gezeigte Code bestätigt ja diesen Fakt!
.
Was unter
use bytes; funktioniert oder nicht funktioniert, ist auch nur noch von archäologischem Interesse, denn davon sollte man die Finger lassen.