zou*_*oul 12
引用S26:
类型名为DATA的命名Perldoc块是Perl 5等效的Perl 5
__DATA__部分.区别在于= DATA块只是常规Pod块,可能出现在源文件中的任何位置,并且可以根据需要多次出现.概要2 描述了用于内联数据的新Perl 6接口.
理论上你应该可以做这样的事情(有人请修改语法,如果它关闭):
use v6;
=begin DATA
Foo
=end DATA
say @=DATA;
Run Code Online (Sandbox Code Playgroud)
在实践中,似乎 Rakudo不支持这一点.
rai*_*iph 12
要仔细选择性地引用当前的S02设计文档:
不再有任何特殊的数据流 - 当前文件中的任何Pod块都可以通过Pod对象访问...
您必须自己将[Pod block]内容拆分为行.
[推测]也可以将Pod对象视为IO :: Handle,逐行读取Pod信息(如Perl 5中的DATA文件句柄,但适用于任何Pod块).
因此,不是通过读取文件句柄访问每个文件的单个DATA部分,而是在脚本文件中定义任意数量的Pod块; 它们$=pod在编译时存储在变量中; 你从那个变量中读取; 而名为'data'的那些是Perl 5的DATA的等价物.
今天有效.我马上就会证明这一点.但首先我需要谈谈今天不起作用的东西.
上面的引用是高度选择性的.摘要文本谈到P6自动创建一个变量,其名称形式$=foo对应于名为'foo'的Pod块.这是Pod块的一般尚未实现的功能,而不仅仅是数据块.
Pod设计文档S26的"数据块"部分讨论的数据块比普通的旧Pod块做得更漂亮.这还没有实现.
那么,现在让我们继续讨论今天可以做的事情:
=foo This is a Pod block. A single line one. This Pod block's name is 'foo'.
=begin qux
This is another syntax for defining a Pod block.
It allows for multi line content.
This block's name is 'qux'.
=end qux
=data A data block -- a Pod block with the name 'data'.
# Data blocks are P6's version of P5's __DATA__.
# But you can have multiple data blocks:
=begin data
Another data block.
This time a multi line one.
=end data
$=pod.grep(*.name eq 'data').map(*.contents[0].contents.say);
Run Code Online (Sandbox Code Playgroud)
这打印:
A data block -- a Pod block with the name 'data'.
Another data block. This time a multi line one.
Run Code Online (Sandbox Code Playgroud)
所以,它有点有效.但它显然需要更多的糖.
顺便说一句,如果最后一个FP风格的行没有意义,这是一个必要的等价物:
for @$=pod {
if .name eq 'data' {
say .contents[0].contents
}
};
Run Code Online (Sandbox Code Playgroud)