Thread Interpolation in Regexp (8 answers)
Opened by Matthias at 2005-05-20 18:01

steffenw
 2005-05-21 19:19
#55088 #55088
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Wenn in einem String Variablen vorkommen, hier im Beispiel Skalare (durch das vorangestellte Zeichen $markiert), dann werden die natürlich alle aufgelöst oder keine. Wenn man das nicht will, muß man es eben explizit angeben. Manchmal hat man auch Probleme damit, daß man Scalare auflösen möchte, sich aber der Name vom umgerenzenden Text nicht abhebt. Z.B. ist das bei "$scalar1text1$scalar2" der Fall. Das schreibt man dann so: "${scalar1}text1$scalar2". Willst Du, daß z.B. $scalar1 wie geschrieben im Text bleibt, schreibe "\$scalar1text1$scalar2". So wird nur $scalar2 aufgelöst. Um eben nicht immer alle diese Quotingzeichen, also das \ schreiben zu müssen, dafür hat man \Q......\E erfunden. Perl-Programme sollen ja auch nicht von \\\\\\ überhäuft werden, wie man das aus anderene Sprachen kennt, wo dann keiner mehr so richtig durchblickt. Kommen die Daten aus einer externen Quelle, dann weißt Du ja auch nicht, was alles zu quoten ist, dann ist das \Q......\E Konstrukt sehr hilfreich. Perl macht das dann schon richtig - Perl hilft Dir. Schaue Dir auch mal \L, \l, \U, \u, q() und qq() an, dann begreifst Du das alles recht gut. Du mußt Dir immer überlegen, welche Quotingoperatoren Variablen auflösen und welche nicht. Bei Deinem Beispiel ist die Schreibweise "asdf" zwar richtig, gereicht hätte hier aber auch 'asdf' oder q(adsf), weil es nichts aufzulösen gibt.\n\n

<!--EDIT|steffenw|1116689081-->
$SIG{USER} = sub {love 'Perl' or die};

View full thread Interpolation in Regexp