Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Связывание переменных
Связывание (binding), или создание ссылок, осуществляют операторы «:=» и «::=». Они создают синоним переменной, указанной справа от оператора. Любое обращение к синониму эквивалентно обращению к оригинальной переменной:
# binding.p6
my $a = 123;
my $b := $a;
$b = 456;
say $a; # 456
Хотя в последней строке происходит обращение к переменной $a, на экране появится значение 456, которое присвоено через ссылку $b.
Различие между формами с одним и двумя двоеточиями заключается в моменте, когда выполняется связывание. В первом случае оно происходит на этапе выполнения программы, во втором – на этапе компиляции.
Это также сказывается и на размере промежуточного кода.
Например, если приведенную программу оттранслировать в промежуточный PIR-файл (указав опцию -CPIR), получится код длиной 91 049 байт, а та же программа с оператором «::=» окажется чуть короче (90 897 байт). Не стоит пугаться таких размеров промежуточного кода, потому что в нем собрано много определений операторов, которые данной программой не используются.
Конкатенация строк
«Складывание» строк теперь выполняет не оператор «точка», а тильда:
# concatenation.p6
my $before = 'This is';
my $after = 'Perl 6.';
say $before ~ ' ' ~ $after;
Одинарные и двойные кавычки в строках имеют тот же смысл, что и в Perl 5.
Операторы «//» и «//=»
Бинарный оператор «//» (не путайте с началом однострочного комментария) принимает два операнда и возвращает первый из них, если он определен, и второй, если не определен первый.
# double-slash.p6
my $a = "a";
my $b = "b";
my $c;
say $b // $a; # b
say $c // $a; # a
При первом вызове метод say() получает значение переменной $b (поскольку она определена), а второй $a (потому что значение у переменной $c отсутствует).
Оператор «//=» выполняет то же действие, но над единственной переменной: вызов «$a //= $b» равнозначен «$a = $a // $b».
Интервальные условия
В Perl 6 операторы сравнения допускается объединять в цепочку, что позволяет создавать компактные записи, например, для проверки попадания значения переменной в заданный интервал:
# interval.p6
my $x = 5;
say "yes" if 0 < $x < 10;
if 0 < $x < 10 {say "yes"}