Я пытаюсь использовать Filter::Indent::HereDoc, который позволяет сделать отступ для HereDocument. Это очень полезно, чтобы иметь возможность иметь HereDoc, который соответствует логике кода.
Из приведенной выше ссылки
Когда используется «здесь документ», текст документа и строка завершения должны быть на одном уровне с левым полем, даже если остальная часть блока кода имеет отступ.
Filter::Indent::HereDoc снимает это ограничение и действует более похоже на DWIM: если строка терминатора имеет отступ, то этот уровень отступа будет применяться ко всему документу.
Этот модуль можно установить с помощью sudo cpanm Filter::Indent::HereDoc
Однако я обнаружил, что если внутри HereDoc есть пустая строка, она выдает ошибку
Can't find string terminator "EOT" anywhere before EOF at....
Чего не происходит, когда я удаляю пустую строку. Вот МВЕ
#!/usr/bin/perl
use strict;
use warnings;
use Filter::Indent::HereDoc;
my $str = <<'EOT';
some text
some text
EOT
print $str;
Вышеприведенное выполняется без проблем, хотя пространство существует до EOT
(без использования Filter::Indent::HereDoc
это было бы неудачно).
>perl t4.pl
some text
some text
>
Теперь я просто вставляю пустую строку между ними, вот так
#!/usr/bin/perl
use strict;
use warnings;
use Filter::Indent::HereDoc;
my $str = <<'EOT';
some text
some text
EOT
print $str;
и сейчас
>perl t4.pl
Can't find string terminator "EOT" anywhere before EOF at t4.pl line 6.
>
Если пробел перед EOT
теперь убрать, то работает:
#!/usr/bin/perl
use strict;
use warnings;
use Filter::Indent::HereDoc;
my $str = <<'EOT';
some text
some text
EOT
print $str;
и сейчас
>perl t4.pl
some text
some text
>
Но вся идея использования этого модуля состоит в том, чтобы позволить создавать отступы в HereDoc.
Есть идеи, что происходит?
Информация:
>perl --version
This is perl 5, version 18, subversion 2 (v5.18.2) built
for i686-linux-gnu-thread-multi-64int