Thread Listenseparator (20 answers)
Opened by barney at 2023-11-30 19:33

haj
 2023-12-01 22:56
#195588 #195588
User since
2015-01-07
531 Artikel
BenutzerIn

user image
2023-12-01T09:07:59 barney
Ja, anscheinend wird das \" ganz früh zu einem ". Damit verbleibt im String $". Das ist eine Spezialvariable die in den den String interpoliert wird.

Richtig: Das passiert schon, wenn der Tokenizer das Ende des Strings sucht. Jeder \, der nicht vor dem Stringbegrenzer steht, wird beibehalten. Ein \ vor dem Stringbegrenzer hat aber seinen Zweck erfüllt und wird eliminiert.

Andersrum formuliert: Wenn Du $" zwischen "" interpolieren willst, dann musst Du das als $\" schreiben, sonst ist hört der String mit dem $ auf. Es gibt einen Syntaxfehler Final $ should be \$ or $name.

Dass es am Begrenzer liegt, kann man vorführen, indem man die Funktion qq verwendet:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use v5.24;
use strict;
use warnings;
$/ = 'IRS';
$\ = 'ORS';
$" = '-';
say qq"foo$\"bar";  # foo-bar
say qq'foo$\"bar';  # fooORS"bar
say qq'foo$"bar';   # foo-bar
say qq/foo$\/bar/;  # fooIRSbar
say qq/foo$\bar/;   # fooORSbar
say qq$foo\$"bar$;  # foo-bar
say qq$foo\$\"bar$; # fooORS"bar

Dass der Syntax-Highlighter hier ins Schleudern kommt, wundert mich auch nicht weiter.
Dass Perl solche Verrücktheiten zuläßt, wird ja manchmal als Argument gegen die Sprache verwendet. Aber ich finde es ganz sympathisch, dass die Sprachsyntax uns als vernunftbegabte Wesen betrachtet und davon ausgeht, dass man Magie nur dort einsetzt, wo sie notwendig ist.

View full thread Listenseparator