Hallo Bernhard,
[...]
Sollte ja um Himmels willen kein Vorfurf gewesen sein! Ich dachte ja
es läge an mir ;-)
So hab` ich das auch nicht aufgefasst :-) Der Scherz ist wohl missglückt ;-)
[...]
Aber dadurch dass es bei den Scriptsprachen so einfach
geht, auch dank dem Konzept der globalen Variablen, zwingt einen
keiner dazu objektorientiert (var Wert; getWert(); setWert();..) zu
arbeiten, bzw. sich zu überlegen, welche Variablen man braucht.
Genau deshalb sollte man immer "use strict;" verwenden. In meine Anfängen mit Perl hab` ich das auch ignoriert, und musst immer wieder falsch geschriebene Variablen korrigieren, bzw. ziemlich viele Variablennamen ausdenken ;-)
Objektorientiert muss man imho nicht unbedingt programmieren. Aber Variablen- und Routinenbezeichnungen sowie Zuweisungen sollten einigermaßen selbsterklärend sein. Wenn irgendwo eine Subroutine aufgerufen wird, der "keine" Variable übergeben wird, und die "keinen" Wert zurückliefert, macht einen das schon stutzig ;-)
Daher auch mein zwiespältiges Verhältnis zu Javascript, Perl, und
Co. Man kann verdammt viel damit machen, aber wenn man sich nicht
auskennt, kostet es einem viele graue Haare ;-(
Und es kostet Nächte die man ruhig durchschlafen kann (ging mir bei meinem ersten größeren Projekt http://ahnenforschung.net so :-)
Du meinst bei print '' statt "" ?
Genau, aber auch bei Zuweisungen und Stringverknüpfungen verwende ich "" nur, wenn sich im String Steuerzeichen oder eine Variable befinden.
s![\s*(/)\s*($regex)\s*]!<$1$2>!oig;
Bevor ich diese Hieroglyphen in mein Script einbaue muss mir jemand sagen was das heissen soll. Vor allem: Wieso sind da Rufzeichen ! statt den Slashes / ??????
Hier empfiehlt sich wieder mal perldoc perlre ;-) Perl bietet Dir fast alle Freiheiten, so auch die, Deine Begrenzer für den Regulären Ausdruck in gewissem Rahmen zu wählen. So ist s### genauso zulässig wie s!!!. Mann kann sogar Klammerpaare verwenden: s()() aber auch mischen s<>// [Falls vorne Klammern, dann muss der hinter Begrenzer auch paarig sein].
Das ist besonders sinnvoll, wenn Dein Suchausdruck viele Slashs enthält, wie zB. eine URL. So musst Du nicht jeden Slash quoten, bzw. eine Variable durch quotemeta() jagen (http://blablablub/sadf...arrgh ;-). Allerdings musst Du dann imho die im Ausdruck zu findenen Begrenzer quoten (zB.: !). Bei einfachem Patternmatching mit m## ist dann aber das 'm' zwingend, bei m// darf es fehlen.
[ ....... ist klar was das macht!
s* ....... alle \r\t\n\b rausschmeissen
einfach alle Whitespaces, also auch Leerzeichen. Das kann man auch wieder rausnehmen. Es ist so aber ein wenig toleranter gegen Fehleingaben ;-) ([ / b ])
(/) ..... falls </EndTag> (sollte es dann nicht / heissen? ein
slash muss doch maskiert werden oder)
Siehe oben: Maskiert werden muss der Slash nur, wenn er als Begrenzer/Klammernpaar dient.
] ....... ist auch klar!
<$1$2> ... was ist in dem Fall $1 (\s* oder /) und was ist $2
($regex oder eins der \s*)?
$1 und $2 enthalten das Suchergebnis der entsprechenden Klammern. (?:$regex) gruppiert zwar ebenfalls, verhindert aber, daß der Treffer der Klammer in $1..$9 gespeichert wird.
Und hier kommt gleich noch eine Änderung der RegEx :-): (die Erfassung von Whitespaces hab ich mal weggelassen. Schließlich muss man die User ein wenig zu richtigen Eingaben disziplinieren ;-)
s![((?:/)(?:$regex))]!<$1>!oig;
^................^....die äußeren Klammern werden mit $1 "refernenziert", da in den beiden innern mit (?: ein Backtracking unterbunden wird.
[...]
Ich hoffe das bringt Dich wieder auf den rechten Pfad eines Perljüngers ;-)
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html