在Perl中,双引号("),单引号(')和重音符号(`)之间有什么区别?

时间:2016-12-02 14:46:48

标签: perl operators

在Perl中,引用双引号("),单引号(')和严重重音符号(`)之间的区别是什么?

此代码:

#!/bin/env perl
use v5.10;
say "Hello";
say 'Hi';
say `Hola`;

给出以下结果:

Hello
Hi

1 个答案:

答案 0 :(得分:4)

单引号''

构造不带interpolation的字符串。还有一个q()运算符也是如此。

my $foo = 'bar';
print '$foo'; # prints the word $foo
print q($foo); # is equivalent

当您只有文本并且文本中没有变量时,您将使用单引号。

双引号""

使用变量插值构造字符串。还有一个qq()运算符也是如此。

my $foo = 'bar';
print "$foo"; # prints the word bar
print qq($foo); # is equivalent

如果要将变量放入字符串,请使用这些。一个典型的例子是在一个老式的CGI程序中,你可以看到:

print "<td>$row[0]</td>";

如果您的文字包含双引号,则qq()变体会派上用场。

print qq{<a href="$url">$link_text</a>}; # I prefer qq{} to qq()

这比逃避所有引号更容易阅读。

print "<a href=\"$url\">$link_text</a>"; # this is hard to read

反引号``

Shell并执行命令。返回其他程序的返回值。还有一个qx()运算符也是如此。这会插入变量。

print `ls`; # prints a directory listing of the working directory
my $res = qx(./foo --bar);

如果你想编写一个比shell脚本更强大的脚本,你需要调用外部程序并捕获它们的输出。

所有插值的只能插入变量,而不是命令。

my $foo = 1;
my $bar = 2;
print "$foo + $bar";

这将打印 1 + 2 。它实际上不会计算和打印 3

所有这些(以及更多)都在perlop under Quote and Quotelike operators中解释。