Thread RegEx-en und dann zu String evaluieren (13 answers)
Opened by docsnyder at 2006-09-25 16:12

docsnyder
 2006-09-25 16:12
#70224 #70224
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi!

Gegeben ist folgende Funktionalität:

Code: (dl )
1
2
3
4
5
6
7
$a = "foo";

if ( $condition {
$a =~ s/foo/bar/;
}

print $a;


Ich möchte nun die gesamte Funktionalität in den print reinbasteln. Dabei muss ich aber erreichen, dass das Argument von print nach dem RegEx irgendwie zu dem ersetzten String evaluiert. Wenn ich es so mache:

Code: (dl )
print $condition ? $a=~s/foo/bar/ : $a;


evaluiert der Ausdruck

Code: (dl )
$a=~s/foo/bar/


zu 1 (Anzahl der Matches).

Daher habe ich versucht, $a in einem comma-separated-expression anzuhängen, denn so ein Ausdruck evaluiert ja immer zu dem Ausdruck nach dem letzten Komma:

Code: (dl )
print $condition ? $a=~s/foo/bar/, $a : $a;


Das geht aber auch nicht, weil das Komma dann als Argument-Separator des print-statements angesehen wird.

Hhhmmm?

Also habe ich versucht, den comma-separated-expression zu klammern:

Code: (dl )
print $condition ? ($a=~s/foo/bar/, $a) : $a;


... geht aber auch nicht, weil das dann eine Liste ist die wiederum im scalaren Kontext zur Anzahl der Elemente evaluiert.

Auch in einen Block {} kann ich den comma-separated-expression nicht kapseln, da

Code: (dl )
print $condition ? {$a=~s/foo/bar/, $a} : $a;


dann kein Block, sondern ein Hash ist.

Ich habe es jetzt so gelöst, daß ich mir ein anonymes Array bastele und sofort auf den ersten Index zugreife, um $a zu bekommen:

Code: (dl )
print $condition ? [ $a=~s/foo/bar/, $a ]->[1] : $a;


Mir erscheint das ziemlich umständlich. Kann mir jemand sagen, ob bzw. wie das anders (einfacher) geht?

Bin für jeden Hinweis dankbar.

Gruß, Doc

View full thread RegEx-en und dann zu String evaluieren