2

我正在尝试在 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
4

3 回答 3

2

Perl 5 将(?:PATTERN)序列添加到正则表达式中,选择它是因为(?在所有以前的 Perl 版本中都无效,因此不会破坏当前工作的代码。这也意味着任何使用它的代码都与之前的 Perl 版本不兼容。

很少有现代 Perl 代码可以与 Perl 4 一起使用。您可能需要升级您的 Perl。这可能需要一系列级联升级,例如您的 C 编译器等。

如果您没有与惠普进行某种安全更新安排,我会非常关心将旧系统连接到互联网。如果您没有将您与旧系统联系起来的专有软件,那么升级到更新的操作系统可能会为您提供很好的服务。

于 2012-04-16T15:23:19.953 回答
2

首先,您将不得不更新您的 Perl 版本。Perl 4.0 已经过时了,我什至找不到任何关于它的文档。

您可以从HP/UX 的 Perl for HP/UX -11i页面更新 Perl。

此更新将使您从 Perl 4.0 一直升级到大约五年前发布的 Perl 5.8.8。Perl 5.8.8 远不是最新的,但至少它将把你的 Perl 带入 21 世纪。

带上喷气背包和飞行汽车!

于 2012-04-16T15:52:15.183 回答
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 版本。如果文达斯是正确的,它大约有 20 年的历史,如果它确实有效,那只是习惯的力量。

于 2012-04-16T14:56:08.567 回答