В чем разница между одинарными и двойными кавычками в Perl? - PullRequest
5 голосов
/ 08 января 2010

Я только начинаю изучать 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.

Ответы [ 6 ]

15 голосов
/ 08 января 2010

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

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

4 голосов
/ 08 января 2010

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

3 голосов
/ 08 января 2010

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

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

1 голос
/ 02 марта 2010

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

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

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

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

print "This string \n shows up on two lines.";
print 'This string \n shows up on only one.'
1 голос
/ 08 января 2010

В дополнение к вашей ссылке О'Рейли, ссылка не менее авторитетная, чем книга «Программирование на 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 'print' должен был иметь отступ.

1 голос
/ 08 января 2010

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

...