正则表达式中没有任何内容?+ *

时间:2012-04-16 13:50:39

标签: regex perl makefile netcat

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

3 个答案:

答案 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岁,如果确实有效,它只能通过习惯的力量。