gudn tach!
ich möchte aus "true,ja,yes" in "1" wandeln, genau so "false,nein,no" in "0".
$zellinhalt =~ tr/[true][ja][yes]/1/d;
$zellinhalt =~ tr/[false][nein][no]/0/d;Leider funktioniert dies nicht bei "nein"
Du solltest Syntax nicht raten, sondern die Elemente anwenden, die auf dein Thema passen.
hierbei stimme zwar zu, aber der rest der antwort bezieht sich eigentlich auf gar nicht genannten code. ;-)
"nein" wird nach "nin" gewandelt...
nein.
es geht hier nicht um gewoehnliches suchen/ersetzen von strings, sondern um suchen und ersetzen von zeichen. strings werden in perl durch
$haystack =~ s/needle/replacement/;
ersetzt. hier wurde aber die tr-syntax angewendet, die nur nach einzelnen zeichen sucht und jene ersetzt (transliteration), siehe perldoc
$_ = 'true,ja,yes';
tr/[true][ja][yes]/1/d;
print $_,\"\n\";"
liefert als ergebnis zwei kommas:
,,
weil alle oeffnenden eckigen klammern durch "1" ersetzt werden und die restlichen zeichen aus dem pattern geloescht werden.
Dieses wird durch 0 ersetzt, vermutlich macht Perl dann das Zeichen \0 daraus.
0 und "0" ist in perl eigentlich das gleiche. je nach kontext wird es halt so oder so interpretiert. wenn man das zeichen "\0" benutzen moechte, muss man es auch so schreiben, also "\0", wohlgemerkt mit nur einem backslash, also nicht wie im regexp-verunstaltenden php.
Aber das wolltest du vermutlich alles gar nicht wirklich wissen.
damit hattest du wohl rechter als du denkst.
Dein Fall braucht eine Alternation, also ein Oder, was mit true|ja|yes (gegebenenfalls auch mit Klammern drumherum) notiert wird.
z.b. so:
$zellinhalt =~ s/\b(?:true|ja|yes)\b/1/g;
$zellinhalt =~ s/\b(?:false|nein|no)\b/0/g;
prost
esth