Perl q函数或单引号不';无法正确返回UNC路径的字符串文字
Perl的q函数或单引号应该返回键入的字符串文字(除了Perl q函数或单引号不';无法正确返回UNC路径的字符串文字,perl,string-literals,Perl,String Literals,Perl的q函数或单引号应该返回键入的字符串文字(除了\')。但在下面的场景中,它并没有像预期的那样工作。 我想打印以下UNC路径 \\dir1\dir2\dir3 所以我用了 my $path = q(\\dir1\dir2\dir3); 或 但这跳过了前面的一个反斜杠。 因此,如果我打印它,即,print$path打印 \dir1\dir2\dir3 我想知道为什么?我必须在UNC路径的开头键入3或4个反斜杠,以使其按预期工作。我错过了什么?来自: q/STRING/ “字符串” 单
\'
)。但在下面的场景中,它并没有像预期的那样工作。
我想打印以下UNC路径
\\dir1\dir2\dir3
所以我用了
my $path = q(\\dir1\dir2\dir3);
或
但这跳过了前面的一个反斜杠。
因此,如果我打印它,即,print$path代码>打印
\dir1\dir2\dir3
我想知道为什么?我必须在UNC路径的开头键入3或4个反斜杠,以使其按预期工作。我错过了什么?来自:
q/STRING/
“字符串”
单个带引号的文本字符串。反斜杠表示反斜杠,除非后跟分隔符或另一个反斜杠,在这种情况下,将插入分隔符或反斜杠
更改:
my $path = q(\\dir1\dir2\dir3);
致:
至于原因,这是因为Perl允许通过反斜杠转义将引号分隔符包含在字符串中:
my $single_quote = 'This is a single quote: \'';
my $backslash = 'This is a backslash: \'; # nope
但是,如果分隔符之前的反斜杠总是转义分隔符,则无法用反斜杠结束字符串:
my $single_quote = 'This is a single quote: \'';
my $backslash = 'This is a backslash: \'; # nope
允许对反斜杠进行转义也可以解决以下问题:
my $backslash = 'This is a backslash: \\';
有趣的是,只有一种方法可以在perl字符串中键入双反斜杠,而不将其插入为单个反斜杠。
正如所有其他答案所示,任何引号操作符都将反斜杠视为反斜杠,除非后面有另一个反斜杠
要使双反斜杠完全按照您键入的内容显示,唯一的方法是使用
my$path=\d
实际上是\d
在q()
表达式中,因此您可以不使用3个初始反斜杠
my $path = <<'VISTA';
\\dir1\dir2\dir3
VISTA
chomp $path;
print $path."\n";