【问题标题】:In Perl what is the difference between double quotes("), single quotes(') and grave accent(`) [closed]在Perl中,双引号(“),单引号(')和重音(`)有什么区别[关闭]
【发布时间】:2017-09-25 11:33:06
【问题描述】:

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

这段代码:

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

给出以下结果:

你好 你好

【问题讨论】:

  • 我实际上并不认为这是非常离题的。这是一个有效的问题,尽管 OP 可能已经对其进行了研究。这东西很基础,但是如果直接在perldoc中查找就不好找了。
  • @MattJacob 在我的情况下,这不是 10 秒的谷歌搜索......
  • 这里不展开讨论。目前该问题有两次接近投票,均以题外话的原因请求查找场外资源。我不同意那些,所以我表达了不同意。 @MattJacob 我认为确实存在。但是社区决定删除它(我现在不会找到元线程)。我仍然认为这是一个很好的问题,尽管实际上在谷歌上搜索它的一部分会发现stackoverflow.com/questions/943795/…,这几乎是重复的。那里缺少反引号。

标签: perl operators


【解决方案1】:

单引号''

构造没有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 中进行了解释。

【讨论】:

  • @choroba 每次有人编辑我的一个错别字时,我都会有一种温暖的模糊感觉,人们实际上在阅读我的东西:D
  • 每次输入 SO 时,都会杀死别人的脑细胞 :-)
猜你喜欢
  • 2010-10-30
  • 2014-05-13
  • 2017-05-14
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
相关资源
最近更新 更多