Perl 6 / все про qq:to

heredocs

Применение так называемых heredocs (here documents) в Perl 5 традиционно вызывало эстетическое неудовольствие от того, что, во-первых, метка окончания вставки должна находиться в начале строки, а во-вторых, пробелы отсчитываются от начала строки, поэтому фрагмент кода со вставкой «липнет» к левому краю текстового редактора.

В Perl 6 теперь разрешено ставить метку в любую позицию строки при условии, что она начинается не позже, чем любая строка в блоке:

my $str = qq:to/TEXT_END/;
   alpha
      beta
         gamma    
   TEXT_END
say $str;

Этот пример напечатает следующее:

alpha
   beta
      gamma

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

Например, если метку сдвинуть в начало строки

my $str = qq:to/TEXT_END/;
   alpha
      beta
         gamma    
TEXT_END
say $str;

на печати появится соответствующий отступ:

   alpha
      beta
         gamma

В том случае, если найдется строка, отступ у которой меньше, чем отступ метки, pugs выдает предупреждение:

*** Insufficient indent level in heredoc (5 expected)

heredocs, qq:to — 24 апреля 2007