那里:我是Perl的新手,并且遇到了字符串连接问题.我有两个字符串:
my $string1 = "hello\U\Q \t\n\f\b\aWorld" . "\n" . "\E";
my $string2 = "hello\U\Q \t\n\f\b\aWorld\n\E";
Run Code Online (Sandbox Code Playgroud)
它们看起来和我一样,直到我打印出来.
$string1看起来像这样:
hello\ \ \
\
\WORLD
Run Code Online (Sandbox Code Playgroud)
和一个铃声.
$string2 就是这个:
hello\ \ \
\
\WORLD\
Run Code Online (Sandbox Code Playgroud)
带有相同的铃声,尾部有反斜杠.
为什么$string2在结尾处得到反斜杠但$string1不是?
Nic*_*ick 10
当你使用时,\Q你要告诉它引用(在前面放一个反斜杠)所有不匹配的字符\w.结果是,每当代码中出现反斜杠时,您都会添加反斜杠.例如,\a创建铃声,但你的字符串会添加一个反斜杠.当你使用\Q它时,它会以这种方式运行,直到你到达\E 或到达字符串的末尾.
在创建时,$string1您实际上有3个单独的字符串,您将它们一起添加,因此它们将被单独评估.结果是只有3中的第一个受到影响\Q.
在第二个示例中,\n\E结果在\\字符串中.当你打印出来时,它会导致你看到的尾随反斜杠.
希望有道理.
因为\Q引用任何元字符(包括"\")直到\E字符串的结尾.如果您希望它们打印相同,请使用:
my $s1 = "hello\U\Q \t\n\f\b\aWorld" . "\Q\n" . "\E";
Run Code Online (Sandbox Code Playgroud)
去检查:
my $s2 = "hello\U\Q \t\n\f\b\aWorld\n\E";
$s1 eq $s2 && print '$s1 is equal to $s2', "\n";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1275 次 |
| 最近记录: |