Ich arbeite an einer kleinen DSL, die das nomethod
Fallback für Überladung verwendet, um die Operatoren zu erfassen, die auf den überladenen Werten verwendet werden. Dies ist ähnlich der Funktion der symbolic calculator beschrieben in overload
's Dokumentation.Gibt es eine Möglichkeit, den Regex-Bindeoperator `= ~` in Perl zu überladen?
Dies funktioniert für die Standardvergleichsoperatoren in Ordnung, aber die folgenden Punkte beachten:
my $ret = $overloaded =~ /regex/;
In diesem Fall wird nomethod
genannt $overloaded
stringify und nach, dass die Überlastung verloren. Ich dachte daran, eine gebundene Variable zurückzugeben, die mir zumindest erlauben würde, das ursprünglich überladene Objekt herumzutragen, aber das wird während der Ausführung der Regex noch verloren gehen.
So ist die ultimative Frage, ob es eine Möglichkeit ist overload
‚s Idee eines symbolischen Rechners umfasst die Regex Bindung Operatoren =~
und !~
, so dass das obige Codebeispiel nomethod
ähnlich mit ($overloaded, qr/regex/, 0, '=~')
oder etwas nennen würde zu verlängern?
Ich habe auch kurz in die Überladung des Smartmatch-Operators ~~
geschaut, aber das schien auch nicht den Trick zu tun (immer standardmäßig Regex Matching statt überladen).
Edit: Ich schaute in ~~
mehr, und festgestellt, dass my $ret = $overloaded ~~ q/regex/
funktioniert aufgrund Smartmatching-Regeln. Schließen, aber keine ideale Lösung, und ich würde es gerne vor 5.10 arbeiten, also begrüße ich andere Antworten.
Ich denke, die Bereitstellung eines Wrappers für die Regex-Engine würde auch nicht funktionieren, wenn Sie möchten, dass es vor 5.10 funktioniert. –
Beende den Wahnsinn! Lerne Python! – bukzor
@bukzor: Ich bin mir ziemlich sicher, dass Sie den Regex-Bindeoperator in Python nicht überladen können, da er keinen hat. Natürlich könnten Sie eine Klasse schreiben, die Ihnen ähnliche, eingeschränkte Funktionalität bietet: http://code.activestate.com/recipes/302498-re-match-and-replace-through-operator-overloading/ –