首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么过滤::缩进::HereDoc在HereDoc中间的空行中抱怨

为什么过滤::缩进::HereDoc在HereDoc中间的空行中抱怨
EN

Stack Overflow用户
提问于 2015-06-22 06:44:08
回答 1查看 119关注 0票数 1

我正在尝试过滤器::缩进::HereDoc,它允许一个人缩进HereDocument。这是非常有用的,能够有与代码逻辑流的HereDoc。

从上面的链接

当使用“此处文档”时,即使代码块的其余部分缩进,文档文本和终止字符串也必须与左边距平齐。 Filter::缩进::HereDoc删除了这个限制,并以一种更DWIM的方式进行操作--如果终止符字符串缩进,那么缩进级别将适用于整个文档。

可以使用sudo cpanm Filter::Indent::HereDoc安装此模块。

但是,我发现如果HereDoc中有空行,那么它就会产生错误。

代码语言:javascript
复制
  Can't find string terminator "EOT" anywhere before EOF at....

当我删除空白行时不会发生这种情况。这是MWE

代码语言:javascript
复制
#!/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,它就会失败)

代码语言:javascript
复制
>perl t4.pl 
some text
some text
>

现在,我只在中间插入一个空行,如下所示

代码语言:javascript
复制
#!/usr/bin/perl
use strict;
use warnings;
use Filter::Indent::HereDoc;

my $str = <<'EOT';
    some text

    some text
    EOT

print $str;

而现在

代码语言:javascript
复制
>perl t4.pl 
Can't find string terminator "EOT" anywhere before EOF at t4.pl line 6.
>

如果现在删除了EOT之前的空格,那么它可以工作:

代码语言:javascript
复制
#!/usr/bin/perl
use strict;
use warnings;
use Filter::Indent::HereDoc;

my $str = <<'EOT';
     some text

     some text
EOT

print $str;

而现在

代码语言:javascript
复制
>perl t4.pl 
     some text

     some text
>

但是使用这个模块的整个想法是允许一个人缩进HereDoc。

知道怎么回事吗?

信息:

代码语言:javascript
复制
>perl --version

This is perl 5, version 18, subversion 2 (v5.18.2) built 
for i686-linux-gnu-thread-multi-64int
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-22 08:19:37

文档说:

如果没有终止符字符串(因此这里的文档在第一个空行处停止),那么足够的空白将被去掉,这样文档的最左边的字符将与左边距平齐。 打印<<;你好,世界!#这将打印:你好,世界!

这是你在问题中引用的段落下面的一段。它停留在空行的事实是一个特性

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30973532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档