$myVar="this#@#!~`%^&*()[]}{;'".,<>?/\";
Ich bin diese Variable nicht in der Lage und es verwendet, zu exportieren, wie es in meinem Programm.
Kann mir jemand dabei helfen?
$myVar="this#@#!~`%^&*()[]}{;'".,<>?/\";
Ich bin diese Variable nicht in der Lage und es verwendet, zu exportieren, wie es in meinem Programm.
Kann mir jemand dabei helfen?
Verwenden q die Zeichen zu speichern und die quotemeta verwenden alle Zeichen
my $myVar=q("this#@#!~`%^&*()[]}{;'".,<>?/\");
$myVar = quotemeta($myVar);
print $myVar;
Oder verwenden regex Substitution zu entkommen alle Zeichen
my $myVar=q("this#@#!~`%^&*()[]}{;'".,<>?/\");
$myVar =~s/(\W)/\\$1/g;
print $myVar;
$ var = q ($ var); $ var = quotemeta ($ var); In diesem entkommt auch $ in '$ var', so dass der Wert von $ var nicht ersetzt wird. –
@PradnyaDeshmukh Stattdessen verwenden Sie 'qq ($ var);' – mkHun
Arbeitete quotemeta() für mich –
Dies ist, was quotemeta ist, wenn ich Ihre Suche verstehe. Von verknüpften Dokumenten
Gibt den Wert von EXPR zurück, wenn alle nicht "Wort" -Zeichen rückgestrichen sind. (Das bedeutet, dass allen Zeichen, die nicht mit
/[A-Za-z_0-9]/
übereinstimmen, ein Backslash in der zurückgegebenen Zeichenfolge vorangestellt wird, unabhängig von den Gebietsschemaeinstellungen.) Dies ist die interne Funktion, die das\Q
Escape in Strings mit doppelten Anführungszeichen implementiert.
Seine Verwendung ist sehr einfach
my $myVar = q(this#@#!~`%^&*()[]}{;'".,<>?/\\);
print "$myVar\n";
my $quoted_var = quotemeta $myVar;
print "$quoted_var\n";
Bitte beachte, dass wir müssen manuell den letzten Backslash , es zu verhindern, dass die Endbegrenzer zu entkommen. Oder Sie können am Ende ein zusätzliches Leerzeichen anbringen und dann abziehen (von chop).
my $myVar = q(this#@#!~`%^&*()[]}{;'".,<>?/\);
chop $myVar;
Jetzt $myVar
wie oben verwandeln, quotemeta
verwenden.
Ich nehme das äußere Paar von "
, um nur anzugeben, was Sie in der Variable möchten. Aber wenn sie tatsächlich in der Variable enthalten sein sollen, dann setzen Sie einfach alles in q()
, denn dann ist das letzte Zeichen "
. Das einzige Problem ist ein umgekehrter Schrägstrich unmittelbar vor dem schließenden Begrenzer.
Wenn Sie dies in einem Regex-Kontext benötigen, verwenden Sie \Q
zum Starten und \E
, um zu beenden.
Was ist zwischen \ Q und \ E als normale Zeichen behandelt wird, nicht regexp Zeichen. Beispiel:
'.' =~ /./; # match
'a' =~ /./; # match
'.' =~ /\Q.\E/; # match
'a' =~ /\Q.\E/; # no match
Es verhindert nicht, dass Variablen interpoliert werden.
$search = '.';
'.' =~ /$search/; # match
'a' =~ /$search/; # match
'.' =~ /\Q$search\E/; # match
'a' =~ /\Q$search\E/; # no match
'\ Q \ E zu entkommen 'check diese Escape-Modifikatoren – ssr1012