是否可以将pod代码转换成保存在变量中的pod代码,使其在与pod2text一起使用时表现得像$=pod
?
#!/usr/bin/env perl6
use v6;
use Pod::To::Text;
my $code = $*PROGRAM.slurp;
my $pod = $code.subst( / ^ .+ \n <?before '=begin pod'> /, '' );
# convert $pod so it works with pod2text like $=pod does
say pod2text $pod;
say "==============";
say pod2text $=pod;
=begin pod
=head1 NAME
Test pod
=head1 DESCRIPTION
This is a test.
=end pod
答案 0 :(得分:6)
The $=pod
variable包含值的Array
,每个值都是Pod::Block
(的子类)的实例。因此,您需要复制它。
如果使用P6编译器编译某些P6代码,则应该自动编译其中的任何Pod,并且$=pod
变量会自动初始化为包含Pod编译的结果。使用Rakudo:
=begin foo
foo-text
=end foo
say $=pod;
显示:
[Pod::Block::Named{:name("foo")}
Pod::Block::Para
foo-text
]
浏览了相关的编译器模块(grammar,actions,compiling wrapper),我认为要花很多时间才能理解它。这种理解的结果可能是按原样使用其中一些代码的能力,但我怀疑,至少在不对编译器代码进行某种程度的重构的情况下,您同样有可能。
以下$pod
也将被pod2text
接受:
my $pod =
[Pod::Block::Named.new:
:name("foo"),
:contents[Pod::Block::Para.new:
:contents["foo-text"]]];
say $pod; # displays same result as for `$=pod` above
想必您寻求的解决方案介于这些极端之间。
答案 1 :(得分:3)
您可以使用Pod::Load
:
这是您的程序:
use v6;
use Pod::To::Text;
=begin pod
=head1 NAME
Test pod
=head1 DESCRIPTION
This is a test.
=end pod
这是您加载它的地方:
use Pod::Load;
use Pod::To::Text;
my $pod = load( "get-pod.p6" );
dd $pod;
say pod2text $pod;
Perl6本身正在与程序的其余部分一起解析Pod,因此@raiph回答的内容也有效,因此,对于您在程序中使用的$ = pod。