Das Beispiel beginnt nach dem üblichen Einbinden von strict und warnings mit dem Laden des utf8-Moduls, das einzig dem Zweck dient, Perl mitzuteilen, dass der Sourcecode in utf-8 geschrieben ist.
Das ist nicht richtig. utf8 ist ein Pragma was bewirkt, dass der Interpreter die im Script notierten Literale als "utf-8-kodierte Zeichenketten" betrachtet und nicht als Bytesequenzen.
Die folgende Zeile binmode STDOUT, ":utf8" sorgt dafür, dass auch die Ausgabe in utf-8 erfolgt. Ohne diese Zeile könnten Umlaute als Fragezeichen oder ähnliches ausgegeben werden.
Auch falsch. Diese Zeile sorgt dafür, dass eben keine utf-8-kodierte Zeichenketten nach STDOUT geschickt werden sondern Bytesequenzen.
Siehe auch:
use utf8;
print 'Ä' =~ /ä/i;
==> das Match ergibt sich nur, wenn pragma utf8 gesetzt ist. D.h., der Modifier /i tut nur dann erwartungsgemäß, wenn er zeichnorientiert arbeitet.
MfG