我正在尝试在HP-UX上编译netcat-0.7.1,但在制作时总是出现此错误:
../doc/texi2pod.pl ./netcat.texi netcat.pod
/^([^=]+)(?:=(.+))?/: ?+* follows nothing in regexp at ../doc/texi2pod.pl line 48.
*** Error exit code 255
我打开texi2pod.pl并尝试按下这样的\ Q \ E:/\Q^([^=]+)(?:=(.+))?\E/
但它不起作用。如果有人可以帮助我,那就太好了。
以下是代码:
($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/);
die "no flag specified for -D\n" unless $flag ne "";
die "flags may only contain letters, digits, hyphens, dashes and underscores\n"
unless $flag=~ /^[a-zA-ZO-9_-]+$/;
perl -v:
Version 4.0
Revision 4.0.1.8
答案 0 :(得分:2)
Perl 5将(?:PATTERN)
序列添加到正则表达式中,选择它是因为(?
在所有以前的Perl版本中都无效,因此不会破坏当前正在运行的代码。这也意味着使用它的任何代码都与以前版本的Perl不兼容。
很少有现代Perl代码可以与Perl 4一起使用。您可能需要升级Perl。这可能需要一组级联升级,如C编译器等。
如果您没有与HP进行某种安全更新安排,我会非常关注将旧系统连接到互联网。如果您没有专有软件将您与旧系统联系起来,那么升级到更新的操作系统可能会为您提供良好的服务。
答案 1 :(得分:2)
首先,您将不得不更新您的Perl版本。 Perl 4.0已经过时了,我甚至找不到任何文档。
您可以从HP/UX's Perl for HP/UX -11i页面更新Perl。
此更新将使您从Perl 4.0一路升级到大约五年前发布的Perl 5.8.8。 Perl 5.8.8远非当前,但至少它会将你的Perl带入21世纪。
带上JETPACKS和飞行汽车!
答案 2 :(得分:0)
($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/);
看起来texi2pod.pl是一个非常古老的脚本(最近更新了2001年?),而不是用use strict
编写的。这可能会使事情变得不确定。我确信它应该有效,所以错误可能出现在你的设置的其他地方。
但是,此特定行似乎只是通过简单地在第一个等号=
上拆分来提取标记和值,因此您可以尝试使用以下之一替换它:
($flag, $value) = split /=/, $flag, 2; # either just split with a limit
($flag, $value) = ($flag =~ /^([^=]+)=(.+)/); # or simplify regex
我认为问题是最后一个问号,我真的不明白其目的。事实上,整个第二部分是奇怪的。 可能是一种误导性的尝试,允许第二次捕获的空值。
ETA:据说,更新您的perl版本。如果Ven'Tatsu是正确的,它大约20岁,如果确实有效,它只能通过习惯的力量。