Tach!
Du brauchst mir die Doku nicht abzutippen, lesen kann ich selber.
Ach, wirklich? Ich tippte aber nicht ab, ich zitierte die Stellen, auf die ich mich bezog. Als Alternative hätte ich auch im Stil von Gesetzestexten darauf verweisen können. Paragraph, Absatz, Satz, Nummer. Leider ist die Perl-Dokumentation nicht so aufgebaut und Kopieren war einfacher als den Weg zu beschreiben. Und das ist sicherlich auch für die interessieren Mitlesenden besser.</menschelei>
Ist er mit dem Ändern in die Formulierung "mit dem Setzen des utf8-Pragmas" korrekter?
Nein.
use utf8
bewirkt, dass der Interpreter die in der Script-Datei notierten Literale als "utf-8-kodierte Zeichenketten" betrachtet und nicht als Bytesequenzen -- Das ist das Wesentliche und das gibt die Doku nicht her.
Ich hatte auch erst gedacht, dass du mit Literale die String-Literale meinst, aber die Dokumentation sieht das anders und bezeichnet auch die im Code für die Keywords verwendeten Literale als solche.
Ansonsten kann man ein Perl-Script in beliebigen Kodierungen abspeichern ohne dieses Pragma setzen zu müssen.
use utf8
wird nur gebraucht, wenn mit den im Script notierten Literalen Operationen ausgeführt werden sollen, die zeichenorientiert arbeiten, Stringfunktionen und z.B. auch reg.Expr.
Die Perldoc nimmt den Literalbegriff auch für Bezeichner wie Variablennamen. Die müssen aber selten stringverarbeitet werden, und es reicht, wenn gleich gemeinte Namen auch als gleich erkannt werden. Ob das auf Zeichen- oder Byte-Ebene passiert ist dabei nebensächlich.
Deine Aussage jedenfalls bezieht sich viel mehr auf die Weiterverarbeitung dessen, was da in den Code-Dateien steht. Ist das denn für die Wiki-Stelle relevant, außer dass die Anweisungen da der Vollständigkeit halber angeführt sind und wenigstens grob deren Bedeutung erklärt wird?
Deiner Meinung nach schaltet also (entgegen der Perldoc-Aussage) das use utf8 nur die interne Verarbeitung um. Wie bringt man dem Perl nun aber bei, dass es die Quellcode-Datei als UTF-8 interpretieren soll, wenn nicht über das in der Perldoc aufgeführte use utf8. Ist dann nur noch die ebenfalls genannte Möglichkeit der UTF-8-BOM verfügbar? Oder was genau ist der Weg? Formulier doch mal den von dir beanstandeten Satz richtig, aber dem Kontext angemessen. Es soll da ja auch keine Abhandlung über Perls Unicode-Handling stehen.
Verstehst du unter "utf-8-kodierte Zeichenketten" etwas anderes als die gemäß UTF-8-Kodierungsvorschrift in Bytes umgewandelten Unicode-Codepoints der jeweiligen Zeichen?
Perl unterscheidet seit Version 5 (2001) zwischen UTF-8-kodierten Zeichenketten und Bytesequenzen. Wenn utf-8-kodierte Zeichenketten nach STDOUT ausgegeben werden, quittiert das der Interpreter mit einer Fehlermeldung "wide character in print...". Deswegen muss vor jeder Ausgabe dafür gesorgt werden dass keine utf-8-kodierten Zeichenketten ausgegeben werden sondern Oktetten (Bytesequenzen).
Also, ich würde schon sagen, dass UTF-8-kodierte Zeichenketten ausgegeben werden (sollen), denn es muss an einem in UTF-8-kodierten String nichts mehr umkodiert werden, sondern lediglich die bereits vorhandenen Bytes 1:1 ausgegeben werden. Dem Perl muss man mit dieser Anweisung nur sagen, dass es da nichts weiter herumzuinterpretieren hat. Am Ende erreicht man doch aber genau das, was da im Wiki steht/stand, nämlich dass UTF-8 in der Ausgabe landet. Und das halte ich für den dortigen Kontext für ausreichend. Es ist ja kein Artikel über die Interna von Perls Unicode-Handhabung (sagte ich ja schon).
dedlfix.