Perl是否具有Python的多行字符串?

Mik*_*ike 20 perl multiline

在Python中,您可以使用docstring创建一个这样的多行字符串

foo = """line1
line2
line3"""
Run Code Online (Sandbox Code Playgroud)

在Perl中有相同的东西吗?

dao*_*oad 37

正常报价:

# Non-interpolative
my $f = 'line1
line2
line3
';

# Interpolative
my $g = "line1
line2
line3
";
Run Code Online (Sandbox Code Playgroud)

Here-docs允许您将任何标记定义为引用文本块的结尾:

# Non-interpolative
my $h = <<'END_TXT';
line1
line2
line3
END_TXT

# Interpolative
my $h = <<"END_TXT";
line1
line2
line3
END_TXT
Run Code Online (Sandbox Code Playgroud)

正则表达式样式引用运算符允许您使用几乎任何字符作为分隔符 - 就像正则表达式允许您更改分隔符一样.

# Non-interpolative
my $i = q/line1
line2
line3
/;

# Interpolative
my $i = qq{line1
line2
line3
};
Run Code Online (Sandbox Code Playgroud)

更新:更正了here-doc令牌.


ire*_*ses 33

Perl没有重要的语法垂直空白,所以你可以这样做

$foo = "line1
line2
line3
";
Run Code Online (Sandbox Code Playgroud)

这相当于

$foo = "line1\nline2\nline3\n";
Run Code Online (Sandbox Code Playgroud)

  • @tsee:为什么?对于OP的简单字符串问题,here-doc的优势是什么?这里的文档有一个主要的缺点,即损害代码的缩进(它们必须左对齐). (4认同)
  • 虽然这是正确的,但您确实想查看此处文档。请参阅其他答案。 (3认同)
  • 普通报价也是如此,除非你最后需要额外的空格.here-docs更可取,因为'和'是用于扫描非常长的字符串末尾的糟糕标识符. (2认同)
  • @ire_and_curses 此处缩进的文档 `&lt;&lt;~EOF` 解决了这个问题(自 Perl5 v26 起可用) (2认同)

Ste*_*eve 15

是的,这是一个here-doc.

$heredoc = <<END;
Some multiline
text and stuff
END
Run Code Online (Sandbox Code Playgroud)