В языке программирования Perl для того чтобы создать строку в коде программы можно использовать
одинарные '
или двойные кавычки "
.
В языке программирования Perl для того чтобы создать строку в коде программы можно использовать
одинарные '
или двойные кавычки "
.
Между ними есть разница. В одинарных кавычках работают
только эскейп последовательности \\
и \'
, в двойных кавычках кроме этих двух работают
еще и другие эскейп последовательности. И только при использовании двойных кавычек имена переменных
разворачиваются в значения (происходит интерполяция). Далее подробности.
И одинарные и двойные кавычки в языке программирования Perl используются для того чтобы описать строки в коде программы (строки в тексте программы называются "строковые литералы"). Вот пример:
#!/usr/bin/perl
my $str1 = 'Hello, world!';
my $str2 = "Hello, world!";
В этой программе мы создали две переменных и каждой из них присвоили по строке. В данном примере нет никакой разницы между использованием двойных и одинарных кавычек, строки которые мы получили и в первом, и во втором случае совершенно одинаковые.
Еще одна общая вещь в использовании одинарных и двойных кавычек — это то как нужно действовать если
нужно чтобы в строке был символ обратный слеш \
. Если нужно создать строку с этим символом, то в
строковом литерале нужно написать два обратных слеша \\
. В получившейся строке будет один обратный слеш.
Вот пример:
#!/usr/bin/perl
my $str1 = '\\';
my $str2 = "\\";
print $str1, "\n";
print $str2, "\n";
Эта программа выведет на экран:
\
\
Первая разница между одинарными и двойными кавычками заключается в том что нужно сделать чтобы создать строку в которых есть одинарные или двойные кавычки.
С помощью одинарных кавычек очень легко создать строку в которой есть двойная кавычка: '"'
. А если
нужно сделать строку в которых есть одинарная кавычка, то ее нужно записать с помощью двух символов: обратный
слеш \
и кавычка. '\''
— вот такой строковый литерал создаст строку из одного символа "одинарная кавычка".
В случае двойных кавычек — все наоборот. Удобно создать строку с одинарной кавычкой "'"
, а для того чтобы
разместить в строке двойную кавычку нужно написать перед ней обратный слеш (это еще называют "экранировать") "\""
.
При использовании одинарных кавычек есть только две совокупности символов, которые превращаются в один символ.
Это, как мы уже видели раньше, два обратных слеша \\
— они превращаются в один слеш; и обратный слеш и
одинарная кавычка \'
— это превращается в один символ "одинарная кавычка".
А вот при использовании двойных кавычек есть еще несколько таких совокупности символов (обычно их называют
"эскейп последовательности"). Самая известная и часто используемая — это комбинация символов \n
. \n
в
двойных кавычках превращается в один специальный символ "перевод строки". При использовании одинарных
кавычек print 'ASDF\nQWERTY';
выведет на экран ASDF\nQWERTY
,
а при использовании двойных кавычек print "ASDF\nQWERTY";
на экране появится две строки:
ASDF
QWERTY
Другая используемая эскейп последовательность — это \t
, при использовании в двойных кавычках это превращается
в символ табуляции. Не очень часто, но еще используется \b
, этот специальный символ стирает предыдущий символ
(можно использовать для создания очень простых анимаций в консоли). Есть еще некоторое количество эскейп
последовательностей, но они мало используются.
Если в строке созданной с помощью двойных кавычек записать имя переменной, то в строке вместо имени появится значение этой переменной (при использовании одинарных кавычек в строке будет имя).
Эта фича языка очень часто используется.
#!/usr/bin/perl
my $var = 'John';
my $str1 = 'Hello, $var';
my $str2 = "Hello, $var";
print $str1, "\n";
print $str2, "\n";
Эта программа выведет на экран:
Hello, $var
Hello, John
Строку $str1
мы создали с помощью одинарных кавычек — и в строке содержится ровно то что было написано в строковом
литерале — 'Hello, $var'
. А в строке $str2
имя переменной $var
заменилось на значение этой переменной.
Обратите внимание, что разворачиваются только скаляры и массивы:
#!/usr/bin/perl
my $var = 'John';
my @arr = ('one', 'two');
my %h = (
a => 1,
);
sub my_sub {
return 12;
}
print "$var @arr %h &my_sub";
Эта программа выведет на экран текст John one two %h &my_sub
. Скаляр $var
и массив @arr
развернулись в значения,
а хеш %h
и саба my_sub
— нет.
Во многих случаях для того чтобы создать строковые литералы все равно что использовать — и одинарные и двойные кавычки будут работать одинаково. Рекомендация такая — если для строкового литера все равно что использовать — то используйте одинарные кавычки.