You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HP-UX(hpia11.31)环境编译Perl 5.32.1出现正则计算失败问题咨询

问题根因

该问题是HP-UX老旧C编译器的优化bug导致,核心原因如下:

  • 你使用的HP C/aC++ B3910B A.06.20是2008年发布的老版本编译器,Perl 5.32.1的正则引擎引入了5.28版本没有的批量匹配优化逻辑,regexec.c中的正则匹配边界判断代码,会被编译器的+O2 +Onolimit优化等级错误处理,导致匹配终止条件失效,正则无法正确截取匹配段,直接返回全部输入内容。
  • 该问题仅出现在HP-UX平台,是因为该平台编译器版本老旧,且Perl上游对HP-UX的适配维护从5.30版本开始已经逐步降级,没有针对老编译器的优化问题做兼容处理。
修复方案

你可以按照优先级尝试以下方案:

  1. 单独降低regexec.c的优化等级
    正常执行Configure生成Makefile后,手动修改regexec.o的编译命令,将+O2 +Onolimit替换为+O1,仅对正则引擎文件关闭高阶优化,其余文件保持原编译参数不影响整体性能:
cc -c -DPERL_CORE -D_POSIX_C_SOURCE=199506L -D_REENTRANT \
-Ae -Wp,-H150000 -D_HPUX_SOURCE -Wl,+vnocompatwarnings +DD64 \
-D_INCLUDE__STDC_A1_SOURCE -I/usr/local/include -D_LARGEFILE_SOURCE \
-D_FILE_OFFSET_BITS=64 +O1 regexec.c

重新编译后即可验证正则功能是否恢复正常。
2. 调整栈大小限制
64位HP-UX 11.31默认栈大小上限较低,正则递归匹配可能触发栈越界导致逻辑异常,编译前执行以下命令调整栈限制后再启动编译:

ulimit -s unlimited
  1. 禁用正则trie优化
    如果以上方案无效,可以在执行Configure时添加参数禁用Perl 5.30+新增的正则trie优化,完全兼容老版本编译器的逻辑:
./Configure -Accflags=-DPERL_NO_REGEXP_TRIE [其余原有配置参数]

重新生成Makefile后编译即可。

内容的提问来源于stack exchange,提问作者lthemick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:18:04