Perl Language
Интерполяция в Perl
Поиск…
Базовая интерполяция
Интерполяция означает, что интерпретатор 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{...}
может зависеть от платформы, поскольку они используют кодовые и зависимые от платформы коды.