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.
4

6 回答 6

15

我倾向于说你的 shell/终端出了点问题,无论你输出什么,都将 \n 解释为换行符,问题不在于 Perl。

确认:This Shouldn't Happen(TM) - 在第一种情况下,我希望看到插入新行,但使用单引号,它应该按字面意思输出字符\n不是新行。

于 2010-01-08T14:37:10.107 回答
4

在 Perl 中,单引号字符串不会像\nor那样扩展反斜杠转义符\t。您看到它们扩展的原因可能是由于您使用的外壳的性质,它出于某种原因正在修改您的输出。

于 2010-01-08T15:18:00.697 回答
3

您需要了解的有关引用和类引用运算符的所有信息都在perlop中。

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

于 2010-01-08T16:38:38.787 回答
1

通过“解释”,它们意味着不会打印变量名称等,而是打印它们的值。\n 是一个转义序列,所以我认为它不会被解释。

于 2010-01-08T14:31:21.243 回答
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' 应该缩进。

于 2010-01-08T16:41:26.613 回答
1

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

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

对我来说它工作正常。

文件内容

print "This string \n shows up on two lines.";
print 'This string \n shows up on only one.'
于 2010-03-02T11:18:04.530 回答