我在尝试Filter::Indent::HereDoc,它允许缩进HereDocument。这非常有用,能够让代码逻辑流动的HereDoc。为什么Filter :: Indent :: HereDoc在HereDoc中间的空白行时发生抱怨
从上述链路
当“在这里文件”时,文档文本和终止 串必须与左边距齐平,即使 代码块的其余部分缩进。
Filter :: Indent :: HereDoc删除此限制,并采用更多的DWIM类型的方式 - 即如果终止符字符串缩进,则该缩进级别将应用于整个文档。
此模块可以使用sudo cpanm Filter::Indent::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
>
但是使用这个模块的整体思路是允许一个缩进定界符。
任何想法是怎么回事?
信息:
>perl --version
This is perl 5, version 18, subversion 2 (v5.18.2) built
for i686-linux-gnu-thread-multi-64int
我读过这个,但我真的不明白。我仍然不明白这一切。那么使用这个模块有什么意义呢,如果在这里文档中没有空白行?即我问,如何使用空白行,仍然使用缩进功能?如果一个人不能有空行,那么这个模块就没有意义了。或者可能是我仍然失去了一些东西。 – Nasser
我不知道该模块的用途。方便,我想。它是在2003年编写的,[最新版本](https://metacpan.org/changes/distribution/Filter-Indent-HereDoc)也是2003年。说实话,我没有看到这方面的任何用处。你可以做的是修正它,但是无论如何只有一个功能,所以这没有任何意义。 – simbabque
好的,谢谢。如果这是它应该如何工作,那么它真的没用。在这里没有空白行是没有意义的。 – Nasser