dedlfix: suche/ersetze

Beitrag lesen

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.

"nein" wird nach "nin" gewandelt... warum ?

In []-Klammern stehen Zeichenklassen. Es passt ein Zeichen daraus. [false][nein][no] matcht, wenn das erste Zeichen eins aus f, a, l, s, e ist, das zweite eins von n, e, i (das zweite n spielt keien Rolle mehr, weil doppelt) ist, etc. Das e in 'nein' steht an zweiter Stelle, da passt also das e in der zweiten Zeichenklasse. Dieses wird durch 0 ersetzt, vermutlich macht Perl dann das Zeichen \0 daraus. Das erste und dritte Zeichen passt nicht, das vierte wird von deinem Muster nicht berücksichtigt.

Aber das wolltest du vermutlich alles gar nicht wirklich wissen. Dein Fall braucht eine Alternation, also ein Oder, was mit true|ja|yes (gegebenenfalls auch mit Klammern drumherum) notiert wird.

dedlfix.