灵犀claw写perl脚本——顶级正则+无浮点误差

wils
wils Lv.4 核心创作者

Lv.4 核心创作者

一直想找个脚本环境,需要在进行小数计算时,没有浮点误差

曾经的想法是,使用bc、qalc这样的计算器,确实能消除浮点误差,但在文本处理等方面太弱,通用性不行


最近用灵犀claw写perl脚本,无意间得知,perl里只要写一行use bignum;

就自动将脚本里所有的小数计算变成了十进制计算。。。

惭愧,很久以来一直只把perl用作正则处理文本的工具🤣


perl的正则确实好用

首先,它支持的正则特性和C#一样,是顶级的

再者,perl正则融入了它的语法,写起来更加灵活


举个例子,有一段文本:

“第5页第10行有个错误,需要参考第122页的内容进行修正”

现在需要将“页”前面的数字加上5

perl -pe 's/\d+(?=页)/$& + 5/ge'

很好理解:

  • 正则替换的写法是这样s/查找用的正则/替换为的表达式/flags

  • 如果flags里加个e,也就是ge,“替换为的表达式”就要求值后替换,而不是直接作为字面量进行替换

  • 正则\d+(?=页)就是页前面的数字

  • $1、$2是捕获组,$&是捕获的整个正则,这里也就是捕获的数字,加上5再替换


再说说消除浮点误差:

可以看到,如果直接计算0.1 + 0.2 == 0.3,结果是false

但脚本里加一句use bignum;再计算,结果就是true


随着AI的大规模普及,早就过气的perl,突然重回编程语言排行榜前20

(一年前perl还是第27名,2025年9月飙升到第10名)

虽然有分析师认为是统计假象,但空穴来风未必无因

加之最近灵犀claw内置了PortableGit也包含了perl环境


个人感觉,在处理csv表格,尤其是需要强力正则,且需要保证小数计算无浮点误差的情况下

写perl脚本,是个值得考虑的选项,起码写起来很爽🤣

毕竟js需要调用第三方库,python、c# 需要使用decimal类,还是比较复杂的

而且有了灵犀claw,写perl脚本也没啥门槛,直接说处理csv所需要的步骤就行,结果也很准,只需要把正则描述清楚,且指定使用use bignum;就足够了

海南省
浏览 102
1
9
分享
9 +1
1 +1
全部评论