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

5
我刚开始学习Perl。我查看了Perl入门页面并开始学习。
它说:
单引号和双引号的区别在于,单引号表示其内容应该被字面理解,而双引号表示其内容应该被解释。
当我运行这个程序时:
#!/usr/local/bin/perl
print "This string \n shows up on two lines.";
print 'This string \n shows up on only one.';

它的输出结果如下:

这个字符串
显示在两行上。
这个字符串只
显示在一行上。

我有哪里错了吗? 以下是perl的版本:

perl -v

This is perl, v5.8.5 built for aix

Copyright 1987-2004, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'.  If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.

1
请为您的问题提供更具信息性的标题,例如“Perl中不同引号类型的字符串插值是如何工作的?”。这有助于正确的人查看和回答您的问题。 - Alex Brown
3
"perl中的疑惑":标题太糟糕了!我将把它编辑成有意义的内容。 - Carl Smotricz
1
由于某种原因,许多非以英语为母语的人似乎认为“doubt”与“question”或“problem”意思相同。我经常在这个网站上看到人们误用“doubt”。 - Ether
6个回答

15

我倾向于认为你的shell/终端有问题,并且你输出到的任何东西都将 \n 解释为换行符,而问题并不在Perl中。

为了确认:这不应该发生(TM)- 在第一种情况下,我会期望看到插入一个新行,但是用单引号应该会直接输出字符\n而不是一个新行。


4
在Perl中,单引号字符串不会展开反斜杠转义符,如\n\t。你看到它们被展开的原因可能是由于你使用的shell的性质,某些原因导致输出被修改了。

他们也不会进行变量插值(如"foo is $bar")。 - amphetamachine

3

关于引用和类似引用运算符的所有内容都在perlop中。

回答您的具体问题,双引号可以将某些字面字符序列转换为其他字符。在您的示例中,双引号将字符序列\n转换为表示换行符的单个字符。在单引号字符串中,同样的字面序列只是字面上的\n字符。


1

除了您提供的 O'Reilly 链接外,一本毫不亚于 Larry Wall 的《Programming Perl》书所述,反斜杠插值不会在单引号字符串中发生。

... much like Unix shell quotes: double quoted string literals are subject to   
backslash and variable interpolation; single quoted strings are not   
(except for \' and \\, so that you may ...)  

Programing Perl, 2nd ed, 1996 page 16

看看你的Perl如何处理
print 'Double backslash n: \\n';

同上,请展示'perl -v'的输出。

我相信我已经让论坛编辑软件混淆了,因为最后一个Perl的'print'应该有缩进。


如果我写成print \\n,那么输出的就是\n - Vijay

1
“解释性”的意思是变量名等不会被打印出来,而是打印它们的值。"\n"是一个转义序列,所以我认为它不会被解释。”

1

如果您使用双引号,\n 将被解释为换行符。

但是,如果您使用单引号,则不会将 \n 解释为换行符。

对我来说,它正常工作。

文件内容

print "This string \n shows up on two lines.";
print 'This string \n shows up on only one.'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接