在 Perl 中,可以使用普通引号或here-doc语句编写多行字符串文字,但是由于代码缩进被计为字符串本身的内容,这要么会破坏周围代码的格式,要么需要我们另外取消缩进使用前的字符串。此时,我使用以下子例程来取消缩进字符串文字:
sub unindent {
local $_ = shift;
$_ =~ s/^\s*$//mg;
$_ =~ s/^(\s*>>>\s)//mg;
return $_;
}
print unindent "
>>> #pragma once
>>> #include <...>
>>> ";
但并不是要重新发明轮子,我想问一下 Perl 或 CPAN 中是否已经内置了用于此目的的东西?
最佳答案
经过更多谷歌搜索后,我发现了一些具有类似功能的软件包并部分解决了问题:
-
Mojo::Util
-
Filter::Undent
-
Filter::Indent::HereDoc
-
Heredoc::Unindent
(由于某种原因不在 CPAN 上)
第一个选项需要安装大量依赖项(用于简单的unindent
功能),其余三个仅适用于此处文档。这些包似乎都不支持额外的标记(问题中的 >>>
),在我看来,这比普通缩进更安全(由于制表符空间混合问题)。
关于perl - 取消缩进多行字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21873017/