Perl中单引号和双引号之间的区别是什么?

时间:2009-06-03 09:14:48

标签: perl string

在Perl中,'"之间有什么区别?

例如,我有两个变量,如下所示:

$var1 = '\(';
$var2 = "\(";

$res1 = ($matchStr =~ m/$var1/);
$res2 = ($matchStr =~ m/$var2/);

$res2声明抱怨Unmatched ( before HERE mark in regex m

6 个答案:

答案 0 :(得分:34)

双引号使用变量扩展。单引号不

在双引号字符串中,您需要转义某些字符以阻止它们被不同地解释。在单引号字符串中你没有(除非反斜杠,如果它是字符串中的最后一个字符)

my $var1 = 'Hello';

my $var2 = "$var1";
my $var3 = '$var1';

print $var2;
print "\n";
print $var3;
print "\n";

这将输出

Hello
$var1

Perl Monks对此here

有一个很好的解释

答案 1 :(得分:4)

'不会解析变量和转义

“将解析变量,并转义字符。

如果要将\ _字符存储在$ var2中的字符串中,请使用“\\(”

答案 2 :(得分:3)

双引号解释,单引号不

答案 3 :(得分:2)

Perl采用单引号字符串'原样'并插入双引号字符串。插值意味着它用变量值替换变量,并且还理解转义字符。所以,你的“\(”被解释为'(',你的正则表达式变为m /(/,这就是Perl抱怨的原因。

答案 4 :(得分:2)

如果要创建正则表达式字符串,您应该使用qr// quote-like operator

my $matchStr = "(";
my $var1 = qr/\(/;
my $res1 = ($matchStr =~ m/$var1/);

它创建一个编译的正则表达式,比使用包含字符串的变量快得多。如果在正则表达式上下文中没有使用它也会返回一个字符串,所以你可以说像

这样的东西
print "$var1\n"; #prints (?-xism:\()

答案 5 :(得分:1)

“”支持变量插值和转义。所以在"\(" \内逃脱(

''不支持的地方。因此'\('字面上是\(