ont*_*cks 4 perl string-literals
Perl的q函数或单引号应该将字符串文字返回为typed(除外\').但是对于以下场景,它无法正常工作.我想打印以下UNC路径
\\dir1\dir2\dir3
Run Code Online (Sandbox Code Playgroud)
所以我用过
my $path = q(\\dir1\dir2\dir3);
Run Code Online (Sandbox Code Playgroud)
要么
my $path = '\\dir1\dir2\dir3';
Run Code Online (Sandbox Code Playgroud)
但这会在前面跳过一个反斜杠.所以,如果我打印它,即print $path;它打印
\dir1\dir2\dir3
Run Code Online (Sandbox Code Playgroud)
我想知道为什么?我必须在UNC路径的开头键入3或4个反斜杠,以使其按预期工作.我错过了什么?
Q/STRING /
'串'
单引号的文字字符串.反斜杠表示反斜杠,除非后跟分隔符或另一个反斜杠,在这种情况下,插入分隔符或反斜杠.
更改:
my $path = q(\\dir1\dir2\dir3);
Run Code Online (Sandbox Code Playgroud)
至:
my $path = q(\\\dir1\dir2\dir3);
Run Code Online (Sandbox Code Playgroud)
至于为什么,这是因为Perl允许您通过使用反斜杠转义它来在字符串中包含引号分隔符:
my $single_quote = 'This is a single quote: \'';
Run Code Online (Sandbox Code Playgroud)
但是,如果分隔符之前的反斜杠始终转义分隔符,则无法使用反斜杠结束字符串:
my $backslash = 'This is a backslash: \'; # nope
Run Code Online (Sandbox Code Playgroud)
允许反斜杠转义也可以解决这个问题:
my $backslash = 'This is a backslash: \\';
Run Code Online (Sandbox Code Playgroud)
有趣的是,只有一种方法可以在perl字符串中键入双反斜杠而不将其作为单个反斜杠进行插值.
正如所有其他答案所示,任何引用运算符都将反斜杠视为反斜杠,除非直接跟随它.
获得双反斜杠的唯一方法就是在输入时使用单引号 - doc.
my $path = <<'VISTA';
\\dir1\dir2\dir3
VISTA
chomp $path;
print $path."\n";
Run Code Online (Sandbox Code Playgroud)
会像你输入的那样完全打印出来.
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |