lösche zeichen mit "tr" und schreibe in neue Variable
piet
- perl
Morgen,
ich möchte alle Zeichen ausser [0-9] und [a-z] sowie [A-Z] löschen und das ergebnis auf eine neue Variable schreiben.
löschen Leerzeichen und Steuerzeichen)
alte Variable "@$_[0]"
neue Variable "$wert"
z.B.
tr/[a-z][A-Z][0-9]//cd;
Wie lese ich von der alten Variable und schreibe das Ergebnis auf die neue Variable.
Gruß
piet
Hi, piet
Zeichen außer => [^a-zA-Z0-9]
Matchen von Teilstrings kann man durch einfache Klammern.
Jetzt muss nur noch irgendwo "wert" herkommen, oder?
Gruß, LX
Hi, piet
Zeichen außer => [^a-zA-Z0-9]
Matchen von Teilstrings kann man durch einfache Klammern.Jetzt muss nur noch irgendwo "wert" herkommen, oder?
Gruß, LX
Danke für die schnelle Antwort
@$_[0] = tr/[^a-zA-Z0-9]//cd;
heisst ich ich lese von @$_[0] und schreibe Ergebis nach @$_[0].
Ich möchte aber den alten Zustand behalten und alles in einem Einzeiler lösen.
also, lesen von @$_[0] und schreibe Ergebnis nach $wert
Gruß
piet
Hi,
ich möchte alle Zeichen ausser [0-9] und [a-z] sowie [A-Z] löschen und das ergebnis auf eine neue Variable schreiben.
löschen Leerzeichen und Steuerzeichen)
tr/[a-z][A-Z][0-9]//cd;
paßt nicht wirklich dazu.
Du erhältst hier alle Buchstaben (a-zA-Z), alle Ziffern (0-9) sowie eckige Klammern.
Bei tr wird KEIN Regex benutzt, sondern Zeichenlisten (die auch Ranges wie a-z enthalten dürfen).
Damit das nicht auf $_ angewendet wird, sondern auf eine andere Variable, muß man
$variable =~ tr/[a-z][A-Z][0-9]//cd;
Das Umkopieren geht m.W. nur vorher:
$variable = $original;
$variable =~ tr/[a-z][A-Z][0-9]//cd;
cu,
Andreas
Hallo Andreas,
tr/[a-z][A-Z][0-9]//cd;
paßt nicht wirklich dazu.
und wenn ich "=~ s" benutze, mir einfach nur als erstes "tr" eingefallen.
Ich weiß nich wie, aber hier sollte es in einem Einzeiler gehen.
Gruß
piet
Hi,
tr/[a-z][A-Z][0-9]//cd;
paßt nicht wirklich dazu.
und wenn ich "=~ s" benutze, mir einfach nur als erstes "tr" eingefallen.
Ich weiß nich wie, aber hier sollte es in einem Einzeiler gehen.
Klar geht das in einem Einzeiler:
$variable = $original; $variable =~ tr/a-zA-Z0-9//cd;
cu,
Andreas
Hallo,
Hi,
Klar geht das in einem Einzeiler:
$variable = $original; $variable =~ tr/a-zA-Z0-9//cd;
Das habe ich natürlich nicht gemeint :-).
Ich habe was gelesen und probiere nun einmal
($variable = $original) =~ tr/a-zA-Z0-9//cd;
Vielen Dank nochmals
piet
alte Variable "@$_[0]"
@$_[0]
ist keine Variable, sondern der Slice @{$_}[0]
und ist in diesem Fallbeispiel ein Programmierfalle. Es besteht die Möglichkeit, sich später damit Schwierigkeiten einzuhandeln, falls der Index mehrere Werte umfasst und der Slice einen Listenausdruck zurückliefert. Die Operatoren tr und s funktionieren nämlich nicht mit Listen, sondern nur Skalaren, Lvalues etc. (siehe perlop).
Die bessere Schreibweise $_->[0]
ist immer ein Skalarwert. So wird ein Schuh draus:
use 5.013002;
$_ = ['foo!"$123', 'bar%&/$456', 'baz()=789'];
my $wert = $_->[0] =~ tr/a-zA-Z0-9//cdr;
say $wert; # foo123
Hallo,
Die bessere Schreibweise
$_->[0]
ist immer ein Skalarwert. So wird ein Schuh draus:
use 5.013002;
$_ = ['foo!"$123', 'bar%&/$456', 'baz()=789'];
my $wert = $_->[0] =~ tr/a-zA-Z0-9//cdr;
say $wert; # foo123
Ich habe dies $\_->[0] abgeändert.(man lernt nie aus) :-)
Hier sind nun neue Fragen aufgetaucht.
1\. Was bedeutet "use 5.013002"
2\. Option "r" bei "tr" verursacht einen Fehler.
3\. wenn es keine Veränderung des String gibt, wird dann $wert trotzdem beschrieben ??
vielen Dank
piet
- Was bedeutet "use 5.013002"
Siehe Doku: http://p3rl.org/use
| In the peculiar use VERSION form, […] An exception is raised if VERSION is
| greater than the version of the current Perl interpreter; Perl will not
| attempt to parse the rest of the file.
In der Praxis äußert sich das bspw. so:
$ perl5.12.3 -e'use 5.014'
Perl v5.14.0 required--this is only v5.12.3, stopped at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
- Option "r" bei "tr" verursacht einen Fehler.
Tja, warum nur? Mag es vielleicht damit zu tun haben, dass du einen Teil meines Programms gelöscht hast, ohne Ahnung, was das anrichtet? Mag es vielleicht gerade der Teil sein, der eigens hinzugefügt wurde, um dich davor zu bewahren, das Programm mit einer zu alten Version von Perl laufen zu lassen?
- wenn es keine Veränderung des String gibt, wird dann $wert trotzdem beschrieben ??
Klar, die Zuweisung (Gleichheitszeichen) erfolgt ja unbedingt.
PS: Wohlgemeinter Ratschlag zu deiner Schreibweise - du plenkst, bitte achte in Zukunft darauf, davon abzusehen.
Hallo,
vielen Dank CPAN. Ich musste es erst mehrmals lesen, bevor ich überhaupt verstanden habe was du meinst. (Leitung sitzend)
vielen Dank, viel gelernt
piet