В чем разница между одинарными и двойными кавычками в Perl?

Я только начинаю изучать Perl. Я посмотрел на начальную страницу Perl и начал работать.

В нем говорится:

Разница между одинарными и двойными кавычками заключается в том, что одинарные кавычки означают, что их содержимое следует понимать буквально, а двойные кавычки означают, что их содержимое следует интерпретировать.

Когда я запускаю эту программу:

#!/usr/local/bin/perl
print "This string \n shows up on two lines.";
print 'This string \n shows up on only one.';

Он выводит:

This string
 shows up on two lines.
This string
 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.

person Vijay    schedule 08.01.2010    source источник
comment
Пожалуйста, давайте более информативные заголовки своим вопросам, в этом случае Как работает интерполяция строк в Perl с разными типами кавычек?. Это помогает нужным людям просмотреть и ответить на ваш вопрос.   -  person Alex Brown    schedule 08.01.2010
comment
сомнение в perl: Ужасное название! Я собираюсь отредактировать его на что-то разумное.   -  person Carl Smotricz    schedule 08.01.2010
comment
По какой-то причине многие люди, не владеющие английским языком как родным, думают, что сомнение означает то же самое, что и вопрос или проблема. Я постоянно вижу, как люди злоупотребляют сомнением на этом сайте.   -  person Ether    schedule 08.01.2010


Ответы (6)


Я склонен сказать, что что-то не так с вашей оболочкой/терминалом, и что бы вы ни выводили, это интерпретирует \n как новую строку и что проблема не в Perl.

Чтобы подтвердить: этого не должно происходить (TM) - в первом случае я ожидал увидеть вставленную новую строку, но с одинарными кавычками она должна выводить буквально символы \n и не новая строка.

person Iain Collins    schedule 08.01.2010

В Perl строки в одинарных кавычках не расширяют символы обратной косой черты, такие как \n или \t. Причина, по которой вы видите их расширенными, вероятно, связана с характером используемой вами оболочки, которая по какой-то причине искажает ваш вывод.

person friedo    schedule 08.01.2010
comment
Они также не выполняют интерполяцию переменных (foo — это $bar) - person amphetamachine; 08.01.2010

Все, что вам нужно знать о кавычках и подобных кавычкам операторах, находится в перлоп.

Чтобы ответить на ваш конкретный вопрос, двойные кавычки могут превратить определенные последовательности буквальных символов в другие символы. В вашем примере двойные кавычки превращают последовательность символов \ и n в один символ, представляющий новую строку. В строке с одинарными кавычками та же литеральная последовательность — это просто буквальные символы \ и n.

person brian d foy    schedule 08.01.2010

Под «интерпретируемыми» они подразумевают, что имена переменных и тому подобное будут напечатаны не только их значения. \n - escape-последовательность, поэтому я думаю, что она не будет интерпретирована.

person neohaven    schedule 08.01.2010

В дополнение к вашей ссылке O'Reilly, ссылка, не менее авторитетная, чем книга «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 'Двойной обратный слеш n: \\n';

Как и выше, пожалуйста, покажите нам вывод 'perl -v'.

И я полагаю, что запутал программное обеспечение редактора форума, потому что последний «печать» Perl должен был иметь отступ.

person gary    schedule 08.01.2010
comment
если я напишу как print \\n; это выводит \n - person Vijay; 09.01.2010

Если вы используете двойную кавычку, \n будет интерпретироваться как новая строка.

Но если вы используете одинарную кавычку, \n не будет интерпретироваться как новая строка.

У меня работает правильно.

содержимое файла

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