我正在尝试过滤器::缩进::HereDoc,它允许一个人缩进HereDocument。这是非常有用的,能够有与代码逻辑流的HereDoc。
从上面的链接
当使用“此处文档”时,即使代码块的其余部分缩进,文档文本和终止字符串也必须与左边距平齐。 Filter::缩进::HereDoc删除了这个限制,并以一种更DWIM的方式进行操作--如果终止符字符串缩进,那么缩进级别将适用于整个文档。
可以使用sudo cpanm Filter::Indent::HereDoc安装此模块。
但是,我发现如果HereDoc中有空行,那么它就会产生错误。
Can't find string terminator "EOT" anywhere before EOF at....当我删除空白行时不会发生这种情况。这是MWE
#!/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发布于 2015-06-22 08:19:37
文档说:
如果没有终止符字符串(因此这里的文档在第一个空行处停止),那么足够的空白将被去掉,这样文档的最左边的字符将与左边距平齐。 打印<<;你好,世界!#这将打印:你好,世界!
这是你在问题中引用的段落下面的一段。它停留在空行的事实是一个特性。
https://stackoverflow.com/questions/30973532
复制相似问题