【问题标题】:How to make behave a pod saved in a variable like `$=pod`?如何使保存在 `$=pod` 之类的变量中的 pod 运行?
【发布时间】:2019-05-13 07:50:16
【问题描述】:

是否可以将保存在变量中的 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

【问题讨论】:

标签: raku


【解决方案1】:

The $=pod variable 包含一个Array 值,每个值都是Pod::Block 的(子类)的一个实例。所以你需要重现它。

让 Rakudo 编译器完成所有工作

如果你用 P6 编译器编译一些 P6 代码,那么其中的任何 Pod 都应该被自动编译,并且 $=pod 变量会自动初始化以包含 Pod 编译的结果。使用乐道:

=begin foo
foo-text
=end foo

say $=pod;

显示:

[Pod::Block::Named{:name("foo")}
  Pod::Block::Para
    foo-text
]

浏览了相关的编译器模块(grammaractionscompiling 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

解决方案?

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

【讨论】:

    【解决方案2】:

    你可以使用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 也是有效的。

    【讨论】:

      猜你喜欢
      • 2019-01-23
      • 1970-01-01
      • 2021-08-11
      • 2019-05-04
      • 2018-07-09
      • 2022-11-20
      • 1970-01-01
      • 2022-10-11
      • 2017-11-17
      相关资源
      最近更新 更多