我正在尝试Filter::Indent::HereDoc,它允许我们缩进HereDocument。这非常有用,能够使用代码逻辑流动的HereDoc。
从上面的链接
当使用'here document'时,文档文本和终止 字符串必须与左边距齐平,即使其余部分也是如此 代码块缩进。
Filter :: Indent :: 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
答案 0 :(得分:1)
如果没有终结符字符串(所以这里的文档停止在 第一个空行),然后就会删除足够的空格 文档的最左边的字符将与左边齐平 保证金,例如
print <<; Hello, World! # This will print: Hello, World!
这是您在问题中引用的段落的正下方。 它在空行处停止的事实是一项功能。