1
2
== ERSTES KAPITEL DIE BANANE IST KRUMM ==
== ZWEITES KAPITEL NOCH EINE LUSTIGE ÜBERSCHRIFT ==
1
2
3
4
5
6
7
perl -Mstrict -wle '
my $str = "HALLO";
$str =~ s{\b(\w+)\b}{ucfirst(lc($1))}eg;
print $str
'
Hallo
1
2
3
4
perl -wle 'print ucfirst("HALLO");'
HALLO
$ perl -wle 'print ucfirst(lc "HALLO");'
Hallo
2011-11-09T16:04:13 LinuxerDu schreibst in der Überschrift lcfirst und dann im Beitrag, dass Du den Anfangsbuchstaben groß geschrieben haben willst.
Das widerspricht sich ...
1
2
3
4
5
my $str = "== ERSTES KAPITEL DIE ERSTÜRMUNG DER BURG ==";
$str =~s{== (.*?KAPITEL.*?) ==}{ucfirst(lc($1))}eg;
print $str
'
Erstes kapitel die erstÜrmung der burg
2011-11-09T16:32:43 Lebewesendeswegen das Edit, allerdings konnte ich nicht herausfinden wie ich den Titel ändere.
1 2 3 4 5 6 7
sub ucfirst_every_word { my $s = shift; $s =~ s{\b(\w+)\b}{ucfirst(lc($1))}eg; return $s; } $text =~ s/(= .*?KAPITEL.*? =)/ucfirst_every_word($1)/eg;
1
2
3
4
5
6
7
8
9
10
11
12
use Encode qw(encode decode);
my $enc = 'utf-8'; #in dieser Kodierung ist das Script gespeichert
sub ucfirst_every_word {
my $s = shift;
my $text_str = decode($enc, $s);
$text_str =~ s{\b(\w+)\b}{ucfirst(lc($1))}eg;
$s= encode($enc, $text_str);
return $s;
}
$text =~ s/(= .*?KAPITEL.*? =)/ucfirst_every_word($1)/eg;
Quote…You may (and usually should) use the three-argument form of open to specify I/O layers (sometimes referred to as "disciplines") to apply to the handle that affect how the input and output are processed (see open and PerlIO for more details). For example:
Code: (dl )1
2open(my $fh, "<:encoding(UTF-8)", "filename")
|| die "can't open UTF-8 encoded filename: $!";
opens the UTF8-encoded file containing Unicode characters;…
1 2
$ perl -CO -Mutf8 -lE '$_="==alLE BÄRen MÖGen äpfel und birNEN=="; s/(\w+)/\u\L$1/g; print' ==Alle Bären Mögen Äpfel Und Birnen==
2011-11-09T19:29:02 rostiDas Problem ist nicht UTF-8-spezifisch. Die Stringfunktionen lcfirst() und ucfirst() funktionieren mit Umlauten erst seit Perl 5.6., also seither Perl zwischen Oktetten und Zeichenketten unterscheidet. Encode.pm gibt es seit v5.8, damit ist es möglich, dem Perlinterpreter mitzuteilen, ob es sich um eine Zeichenkette mit einer bestimmten Kodierung handelt.