Wiki: Fehler auf der Regex-Seite
bearbeitet von
Hallo pl,
> Du brauchst mir die Doku nicht abzutippen, lesen kann ich selber.
Dann tu das auch!
> > 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.
Das ist Unsinn. Das `ut8`-Pragma bewirkt, dass **der gesamte Quelltext** als UTF-8 interpretiert wird. Kleines Beispiel gefällig?
~~~perl
#!/usr/bin/perl -w
use strict;
my $äöü = 1;
print $äöü, "\n";
~~~
Dieses Programm sagt bei der Ausführung:
~~~
Can't use global $� in "my" at test.pl line 6, near "my $�"
Unrecognized character \xA4; marked by <-- HERE after my $�<-- HERE near column 6 at test.pl line 6.
~~~
Dagegen dieses Programm:
~~~perl
#!/usr/bin/perl -w
use strict;
use utf8;
my $äöü = 1;
print $äöü, "\n";
~~~
gibt erfolgreich `1` aus. Was du **vermutlich** meinst ist [`use feature "unicode_strings"`](https://perldoc.perl.org/feature.html#The-%27unicode_strings%27-feature), dass dem Compiler sagt, es soll Uniode-Regeln auf alle Strings und Regexe im aktuellen Scope anwenden. Das Gegenstück dazu ist dann [`use bytes`](http://perldoc.perl.org/bytes.html) (von dessen Verwendung abgeraten wird).
Auch das Beispiel aus deinem vorherigen Code ist falsch, es ist durchaus möglich ohne `use utf8` zu matchen:
~~~perl
use strict;
print 'Ä' =~ /ä/ui;
~~~
gibt erwartungsgemäß `1` aus. Und nein, `use utf8` ist nicht das gleiche wie `/u`.
> Ansonsten kann man ein Perl-Script in beliebigen Kodierungen abspeichern ohne dieses Pragma setzen zu müssen.
Gnhahahahaha. Dann erkläre mir bitte, wie du dieses Programm ausführen willst:
~~~perl
#!/usr/bin/perl -w
use strict;
my $äöü = 1;
print $äöü, "\n";
~~~
Und `-C`-Flags zählen nicht!
Für den Rest bin ich jetzt zu müde.
LG,
CK
--
<https://wwwtech.de/about>