Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perlpod文档中是否有重复使用文本的方法?_Perl_Perl Pod - Fatal编程技术网

perlpod文档中是否有重复使用文本的方法?

perlpod文档中是否有重复使用文本的方法?,perl,perl-pod,Perl,Perl Pod,我的perlpod文档中有一堆重复的文本。我当然可以创建一个单独的部分并引用它,但我想知道是否有一种方法可以在某个地方输入一次文本并将其插入多个位置 我不认为这是可能的,但我想我会要求确保我没有遗漏任何东西 或者——也许有更好的perl文档技术?正如您所意识到的,它(有意地)是一种非常简单的标记语言。它没有任何特别复杂的特性,它缺少的一点是嵌入另一个源文本的方法 我建议将重复的文本移动到它自己的部分,并链接到该部分(使用L),只要你想引用该文本。虽然Pod标记是非常基本的,但我们不必手动输入所有

我的perlpod文档中有一堆重复的文本。我当然可以创建一个单独的部分并引用它,但我想知道是否有一种方法可以在某个地方输入一次文本并将其插入多个位置

我不认为这是可能的,但我想我会要求确保我没有遗漏任何东西

或者——也许有更好的perl文档技术?

正如您所意识到的,它(有意地)是一种非常简单的标记语言。它没有任何特别复杂的特性,它缺少的一点是嵌入另一个源文本的方法


我建议将重复的文本移动到它自己的部分,并链接到该部分(使用
L
),只要你想引用该文本。

虽然Pod标记是非常基本的,但我们不必手动输入所有内容

文档文本可以像Perl中的任何其他文本一样,使用其广泛的工具集来处理,以创建带有pod格式文本的字符串。然后可以使用core、通过文件(可以删除或保留)或直接使用core显示该字符串

通过写入文件显示Pod字符串

use warnings;
use strict;
use feature 'say';
use Path::Tiny;    # convenience, to "spew" a file    

my $man = shift;        
show_pod() if $man;
say "done $$";

sub show_pod {
    require Pod::Usage; Pod::Usage->import('pod2usage');

    my $pod_text = make_pod();
    my $pod_file = $0 =~ s/\.pl$/.pod/r;
    path($pod_file)->spew($pod_text);

    pod2usage( -verbose => 2, -input => $pod_file );  # exits by default
}

sub make_pod {
    my $repeated = q(lotsa text that gets repeated);
    my $doc_text = <<EOD;
=head1 NAME

$0 - demo perldoc

=head1 SYNOP...

Text that is also used elsewhere: $repeated...

=cut
EOD

    return $doc_text;
}
(上面程序的其余部分相同)
->filter
调用是创建对象、设置文件句柄和处理内容的快捷方式。更多信息请参见文档

这两种方法都为您提供了更大的灵活性

此外,虽然我们确实可以通过引用包含该文本的单独部分来解决重复的文本,但这当然不允许我们使用变量或进行任何Perl处理——当您编写一个Pod字符串时,所有这些都是可用的,然后将其传递给
perlpod
到dispaly

注意使用
.pod
文件会影响
perldoc
。感谢
@briandfoy
的评论

对于较小的文档,使用单独的
.pod
文件没有特别的好处,我建议使用第二种方法,正如答案中所暗示的那样。它只是在文档文本在文件中的组织方式上有所不同,同时仍然允许像Perl通常处理任何文本一样对其进行处理

对于
.pod
文件具有良好价值的用例,我仍然认为这是一个可以接受的折衷方案,但这是我的要求。请注意,
perldoc
受到影响,并评估这在您的项目中有多重要



†我在一个大型项目中使用这样的系统,目录中有
.pod
文件。还有一个用于整体文档管理的简单的单独脚本,它调用带有选项的单个程序,以带有CPAN样式文件的HTML格式为主网页编写/更新它们的
.pod
s。任何程序也可以简单地以所需的格式显示其文档。

我不建议这样做(我更喜欢静态编写文档,因为它不像代码那样动态),但可以生成pod,并且可以使用或调用。您也可以从模板生成pod。一些模板语言(例如模板工具包)非常丰富,可以实现您想要的。作为一个读者,一遍又一遍地看到同样的文本让我很恼火。作为一名作家,我认为你做错了什么。寻找一个坏主意的技术解决方案也是一个坏主意。@brian d foy-如果你把perlpod作为一本书而不是一个查找参考书来阅读,我同意。请注意,
perldoc
会优先选择一个.pod文件而不是.pm文件,这意味着
perldoc-m
不会让你再看到代码。使用.pod文件并没有错,但它确实让我很恼火。@briandfoy谢谢你的评论,需要提及。(我不使用
-m
对以这种方式准备的文档进行编码,所以我不知道。)我担心,如果我只能在文件文档中使用(这样称呼它们),那么我会受到相当多的限制。我提到的项目需要一个非本机工具来编制预期的文档,而使用单独的
.pod
文件使pod本身完全足够。@briandfoy请注意,我提供的另一个选项没有这个问题(
perldoc
可以使用它)但允许在生成和处理文档文本时充分使用Perl。我觉得,为了能够使用文档进行更多的格式化工作,只引用精确的文本是愚蠢的。虽然POD是基本的,但并不是那么基本。我在最后添加了一条关于这一切的注释,谢谢。有没有办法让这些链接在终端中起作用?我从未见过它们在寻呼机中有任何导航功能。你使用什么寻呼机(如果这些链接对你有用的话)?
sub show_pod {
    my $pod_text = make_pod();

    require Pod::Simple::Text;
    Pod::Simple::Text->filter( \$pod_text );  # doesn't exit so add that
}