我在perlpod文档中有一堆重复的文字。我当然可以创建一个单独的节并引用它,但是我想知道是否有一种方法可以在某处输入一次文本并将其插入多个位置?
我认为这是不可能的,但我想请我确保没有遗漏任何东西。
或者-也许有更好的perl文档技术?
所以我测试了一个利用实验性嵌入代码功能的正则表达式。我的测试成功了,所以我详细说明了它来做一个更复杂的脚本,但遇到了错误。我将错误追溯到在正则表达式中而不是在嵌入代码中的变量的简单使用。我尝试在建议的 eval 中执行正则表达式,但发现这不起作用,因为在 eval 的正则表达式之后我无法访问特殊变量。我最终重新编写了代码以不使用嵌入式代码策略,但我很好奇为什么它不起作用。我在下面的一对 perl one-liners 中简化了问题:
这有效:
perl -e '$_ = "The brown fox jumps over the lazy dog ABC god yzal eht revo spmuj xof nworb ehT";
while (/(.{10,41})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ig {
print("$1\n")
}
sub r { return(join("",reverse(split("",$_[0])))) }'
Run Code Online (Sandbox Code Playgroud)
那为什么不呢?:
perl -e '$_ = "The brown fox jumps over the lazy dog ABC god yzal eht revo spmuj xof nworb ehT";
$f=10;
$e=41;
while (/(.{$f,$e})(?{$cap = $^N;$rev = r($cap);})(...)(??{$rev})/ig) {
print("$1\n")
}
sub r { …Run Code Online (Sandbox Code Playgroud) 我曾经假设,在perl中,$x=(2,3,4,5)并且($x)=(2,3,4,5)会给我相同的结果,但对我的测试中发生的事情感到惊讶.我想知道为什么这种行为是这样的,为什么wantarray表现不同.这是我的测试和结果:
>perl -e '$x=(1,2,3,5);print("$x\n")'
5
>perl -e '($x)=(1,2,3,5);print("$x\n")'
1
>perl -e '$x=(wantarray ? (1,2,3,5) : 4);print("$x\n")'
4
>perl -e '($x)=(wantarray ? (1,2,3,5) : 4);print("$x\n")'
4
Run Code Online (Sandbox Code Playgroud)
所有平台的这种行为是否一致/可靠?
哎呦.wantarray用于子程序调用的上下文...
>perl -e '$x=test();sub test{return(1,2,3,5)};print("$x\n")'
5
>perl -e '($x)=test();sub test{return(1,2,3,5)};print("$x\n")'
1
>perl -e '$x=test();sub test{return(wantarray ? (1,2,3,5) : 4)};print("$x\n")'
4
>perl -e '($x)=test();sub test{return(wantarray ? (1,2,3,5) : 4)};print("$x\n")'
1
Run Code Online (Sandbox Code Playgroud)
所以我猜它是一致的,但为什么列表返回标量上下文中的最后一个值?