Поиск…


Базовая интерполяция

Интерполяция означает, что интерпретатор Perl будет подставлять значения переменных для их имени и некоторых символов (которые невозможно или трудно вводить напрямую) для специальных последовательностей символов (это также называется экранированием). Самое важное различие заключается в одиночных и двойных кавычках: двойные кавычки интерполируют замкнутую строку, но одинарные кавычки не делают.

my $name = 'Paul';
my $age = 64;
print "My name is $name.\nI am $age.\n"; # My name is Paul.
                                         # I am 64.

Но:

print 'My name is $name.\nI am $age.\n'; # My name is $name.\nI am $age.\n

Вы можете использовать q{} (с любым разделителем) вместо одиночных кавычек и qq{} вместо двойных кавычек. Например, q{I'm 64} позволяет использовать апостроф внутри строки без интерполирования (иначе она завершит строку).

Заявления:

print qq{$name said: "I'm $age".}; # Paul said: "I'm 64".
print "$name said: \"I'm $age\"."  # Paul said: "I'm 64".

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

Если ваше имя переменной сталкивается с окружающим текстом, вы можете использовать синтаксис ${var} для устранения неоднозначности:

my $decade = 80;
print "I like ${decade}s music!"  # I like 80s music!

Что интерполировано

Perl интерполирует имена переменных:

my $name = 'Paul';
print "Hello, $name!\n"; # Hello, Paul!

my @char = ('a', 'b', 'c');
print "$char[1]\n"; # b

my %map = (a => 125, b => 1080, c => 11);
print "$map{a}\n"; # 125

Массивы могут быть интерполированы как целое, их элементы разделены пробелами:

my @char = ('a', 'b', 'c');
print "My chars are @char\n"; # My chars are a b c

Perl не интерполирует хеши в целом:

my %map = (a => 125, b => 1080, c => 11);
print "My map is %map\n"; # My map is %map

и вызовы функций (включая константы):

use constant {
    PI => '3.1415926'
};
print "I like PI\n";         # I like PI
print "I like " . PI . "\n"; # I like 3.1415926

Perl интерполирует escape-последовательности, начиная с \ :

\t                  horizontal tab
\n                  newline
\r                  return
\f                  form feed
\b                  backspace
\a                  alarm (bell)
\e                  escape

Интерполяция \n зависит от системы, в которой работает программа: она будет генерировать символ новой строки в соответствии с текущими системными соглашениями.

Perl не интерполирует \v , что означает вертикальную вкладку на C и других языках.

Характер может быть адресован с использованием их кодов:

\x{1d11e}     𝄞 by hexadecimal code
\o{350436}    𝄞 by octal code
\N{U+1d11e}   𝄞 by Unicode code point

или Unicode:

\N{MUSICAL SYMBOL G CLEF}

Персонаж с кодами от 0x00 до 0xFF в нативном кодировании может быть рассмотрен в краткой форме:

\x0a     hexadecimal
\012     octal

Управляющий символ может быть обработан с помощью специальных управляющих последовательностей:

\c@      chr(0)
\ca      chr(1)
\cb      chr(2)
...
\cz      chr(26)
\c[      chr(27)
\c\      chr(28) # Cannot be used at the end of a string
                 # since backslash will interpolate the terminating quote
\c]      chr(29)
\c^      chr(30)
\c_      chr(31)
\c?      chr(127)

Прописные буквы имеют то же значение: "\cA" == "\ca" .

Интерпретация всех управляющих последовательностей, за исключением \N{...} может зависеть от платформы, поскольку они используют кодовые и зависимые от платформы коды.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow