Perl q函数或单引号不';无法正确返回UNC路径的字符串文字

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/ “字符串” 单

Perl的q函数或单引号应该返回键入的字符串文字(除了
\'
)。但在下面的场景中,它并没有像预期的那样工作。 我想打印以下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";