如何使保存在变量“ $ = pod”中的pod行为?

sid*_*com 7 pod perl6

是否可以将pod代码转换为保存在变量中的方式,使其$=pod与pod2text一起使用时的行为类似于?

#!/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
Run Code Online (Sandbox Code Playgroud)

rai*_*iph 6

$=pod变量包含一个Array是(一个亚类的)的每个实例的值组成Pod::Block。因此,您需要重现该内容。

让Rakudo编译器完成所有工作

如果使用P6编译器编译某些P6代码,则应该自动编译其中的任何Pod,并且该$=pod变量会自动初始化为包含Pod编译的结果。使用Rakudo:

=begin foo
foo-text
=end foo

say $=pod;
Run Code Online (Sandbox Code Playgroud)

显示:

[Pod::Block::Named{:name("foo")}
  Pod::Block::Para
    foo-text
]
Run Code Online (Sandbox Code Playgroud)

浏览了相关的编译器模块(语法操作编译包装器)后,我怀疑需要花很多精力才能理解它。这种理解的结果可能是按原样使用其中一些代码的能力,但是我怀疑,至少在不对编译器代码进行某种程度的重构的情况下,您至少有同样的可能。

从头开始

以下$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
Run Code Online (Sandbox Code Playgroud)

一个办法?

大概您寻求的解决方案介于这些极端之间。