RegEx mit backreference - map oder foreach?
Christian
- perl
Hi,
ich habe ein Array @lines, worauf ich einen RegEx anwenden möchte:
foreach (@lines) {
s/^([^$]*)$.*$/$1/;
}
Von jeder Zeile wird also nur der Anfang bis zum ersten Dollarzeichen behalten.
Könnt ihr mir sagen, warum das so nicht funktioniert?
@lines = map( s/^([^$]*)$.*$/$1/ , @lines);
Damit wird jede Zeile durch "1" ersetzt.
Schöne Grüße
Christian :)
Hi,
@lines = map( s/^([^$]*)$.*$/$1/ , @lines);
Damit wird jede Zeile durch "1" ersetzt.
Natürlich. In jeder Zeile wird ja auch genau eine Ersetzung durchgeführt - der Rückgabewert von s/// ist die Anzahl der Ersetzungen.
Willst Du
s/^([^$]*)$.*$/$1/ foreach (@lines);
?
cu,
Andreas
Hi,
so macht das natürlich alles Sinn, danke dir Andreas! :)
Grüße
Christian
Hallo Christian,
Könnt ihr mir sagen, warum das so nicht funktioniert?
@lines = map( s/^([^$]*)$.*$/$1/ , @lines);
die Lösung hat dir MudGuard schon gegeben.
Die richtige Lösung mit map würde so aussehen:
my @nLines = map { /^([^\$]*)\$.*$/ } @lines;
du kannst dir im Prinzip merken, dass innerhalb von map fast nie eine Ersetzung vorkommt. In diesen Fällen verwendet man idR. for(each).
Gruß,
Benne