Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Leonidas hat geschrieben:Das entspricht nicht der Python-Idee und wird es hoffentlich nie geben. Variablen die sich magisch mit Werten füllen *schauder*.
So schlecht, dass man mit re und groups() große Teile dieser Magie ins Boot genommen hat
PmanX hat geschrieben:So schlecht, dass man mit re und groups() große Teile dieser Magie ins Boot genommen hat
Ich seh hier keinen Zusammenhang - wo passiert da irgendwas magisches oder tauchen plötzlich irgendwelche variablen auf?
Ich sehe da ebensowenig Magie. Reguläre Ausdrücke haben ein genau festgelegtes Verhalten und geben immer Treffer beim Matchen zurück die man abfragen kann. Es werden keine externen Variablen modifiziert, weder globale noch so etwas wie re.match_1 oder ähnliches.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Du sprichst hier von regulären Ausdrücken und dass du von deinem Match-Objekt die einzelnen gematchten Gruppen abfragen kannst, was ja wohl auch der Sinn davon ist - was Leonidas kritisiert hat, ist dass sich bei Perl durch eine Aktion irgendwelche anderen globalen Werte ändern.
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
Auf jeden Fall sind sie nicht lokal zur re-Funktion in Perl. Die nicht einmal eine Funktion sondern ein eigenes Syntax-Konstrukt ist. Alles sehr magisch. Bei Python hat man Objekte und Methoden mit der gleichen Semantik wie alle anderen Objekte und Methoden. Kein spezielles Syntaxkonstrukt, keine magischen Variablen, also weniger das man neben den, sowieso schon nicht ganz einfachen, regulären Ausdrücken lernen und behalten muss.
Ja gut, man braucht eine Methode um den eingefangenen String abzuholen.
Wenn die "Magie" nicht wäre, müßte man den RegEx zweimal ansetzen. Matcht & Klammern auslesen.
**Edit**
Die "magischen Variablen" werden im nächsten Block durch den aktuellen Match überdeckt. Ich hatte da nie Probleme.
Rein aus Interresse schaue ich mir seit einigen Tagen Python an. Aus heutiger Sicht kann ich sagen: Für komplexe, umfangreiche Programme ist Python eine gute Wahl. Für String- Textverarbeitung will ich die RegEx und Magie von Perl!
Warum?
``foo`` existier nicht, was durch die exception ``NameError:`` angedeutet wird. Nun wird ``IrgendeinekomischeFunktion`` aufgeruffen die auf "magischerweise" ``foo`` in den globalen namenspace erzeugt. Danach ist ``foo`` existent und man kann darauf auf einmal zugreifen. Sehr Magisch oder? So änlich verhält es sich auch mit $`, $', etc bei Perl beim Gebrauch von regex (/.../).
Ich finde Joghurt hat das sehr anschaulich dargestellt.
Also in 2.x ist exec schon noch ein Statement, also keine Klammern.
Und wenn du exec nur einen String ohne globals- oder locals-Argument gibst, kannst du das auch gleich ohne exec schreiben.
birkenfeld hat geschrieben:[...]
Und wenn du exec nur einen String ohne globals- oder locals-Argument gibst, kannst du das auch gleich ohne exec schreiben.
Ja, hab da auf die schnelle nicht darauf geachtet, weil ich das ursprünglich anders machen wollte...
./test.pl
Inhalt von $1: ab Inhalt von $`: a Inhalt von $': baa
Use of uninitialized value in print at test.pl line 11.
Use of uninitialized value in print at test.pl line 12.
Use of uninitialized value in print at test.pl line 13.
./test.pl
Inhalt von $1: ab Inhalt von $`: a Inhalt von $': baa
Use of uninitialized value in print at test.pl line 8.
Use of uninitialized value in print at test.pl line 9.
Use of uninitialized value in print at test.pl line 10.