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_-]+$/;

パール -v :

    Version 4.0
    Revision 4.0.1.8
4

3 に答える 3

2

まず、Perl のバージョンを更新する必要があります。Perl 4.0 は時代遅れで、ドキュメントすら見つかりません。

HP/UX の Perl for HP/UX -11iページから Perl を更新できます。

この更新により、Perl 4.0 から 5 年ほど前にリリースされた Perl 5.8.8 に移行します。Perl 5.8.8 は現在のものとはかけ離れていますが、少なくともあなたの Perl を 21 世紀に導くでしょう。

ジェットパックと空飛ぶ車を手に入れよう!

于 2012-04-16T15:52:15.183 に答える
2

Perl 5 では(?:PATTERN)正規表現にシーケンスが追加されました。これが選択された(?のは、Perl の以前のすべてのバージョンでは無効であり、現在動作しているコードを壊さないためです。これは、これを使用するコードが以前のバージョンの Perl と互換性がないことも意味します。

Perl 4 で動作する最新の Perl コードはほとんどありません。おそらく、Perl をアップグレードする必要があります。これには、C コンパイラなどの一連のカスケード アップグレードが必要になる場合があります。

HP と何らかのセキュリティ アップデート契約を結んでいない場合、私は非常に古いシステムをインターネットに接続することに非常に関心があります。その古いシステムに結び付くプロプライエタリなソフトウェアを持っていない場合は、より新しい OS にアップグレードすることで十分に機能するでしょう。

于 2012-04-16T15:23:19.953 に答える
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

問題は最後の疑問符だと思いますが、その目的はよくわかりません。実際、2番目の部分全体は奇妙です。2回目のキャプチャで空の値を許可しようとするのは、誤った試みである可能性があります。

ETA:そうは言っても、perlバージョンを更新してください。Ven'Tatsuが正しければ、その約20歳であり、それが実際に機能する場合、それは習慣の力によってのみです。

于 2012-04-16T14:56:08.567 に答える