【perl】老司机的再一次翻车:没有想到加了一句打印,会影响结果输出

简介: 【perl】老司机的再一次翻车:没有想到加了一句打印,会影响结果输出

前言

自诩为多年perl海浮沉的老司机,竟然因为加了一句打印而翻车,这真是万万没有想到,记录一下引以为戒。

事情的由来

在脚本的读取文件里有很多字符串进行处理的时候,定位就会变得困难,比如说我只想打印A的沿路信息,但是直接加打印就会把ABCDE的一大堆信息全打印出来,筛选起来非常的难受。

因此我想到了之前搭环境时候做的一个操作,做一个debug函数在数据流里筛选,符合我需求的(比如说带有ecc error的transaction)报文才会触发debug打印,这种操作在脚本里完全可以照搬一下嘛!

额外感叹一下,最近越来越感觉到我做脚本的思路继承了各种之前搭环境的思路,估计没有几个人写perl的时候还要设置打印等级和最大error数量吧🆒

回归原题,因此我就做了一个简单的筛选机制,简化下的意思就是这样:

my $debug_name = “AA”;
warn “xxxxx” if $name =~ /$debug_name/;
• 1
• 2
• 3

也很好理解嘛,某一个变量包含我需要的信息,那就打印一些debug信息给我,如果不包含就pass,写完后我就觉得简直天衣无缝。

翻车事故

我一直这么开心的用着,直到一次我发现,某一处我加了打印后,竟然输出结果跟不加打印完全不一样?!当时我都疯了,倒是见过加一句$display把随机搞乱的情况,脚本里我还真的没见过加打印能影响输出的。

因此仔细的看了下上下文,终于发现了端倪,因为我的代码结构是这样子的:

if($name =~ /…/){
    warn “…” if $name =~ /$debug_name/;
    my $pre = $`;
    my $post = $’;
    my $body = $&;
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7

问题就出现在下面的取匹配信息上了,本来我要取的是首行if里的匹配结果,结果这样一搞,我取到的是warn行后面的匹配结果,再加上我这里没有使用$1 $2编译没能报错,导致整个匹配处理彻底乱了也没被发现,最终的输出自然各种奇怪的东西。

问题解决

我把打印删了,改用eq ne,嘿高精度打印不搞模糊打印了~~~


相关文章
|
8月前
|
安全 测试技术
不会写测试用例咋办?牢记这5点,你也能写出高逼格案例
不会写测试用例咋办?牢记这5点,你也能写出高逼格案例
|
10月前
|
人工智能 算法 Java
关于“Python进高考”,我有句呵呵不知当讲不当讲
如果你是需要用编程来解决问题,那么用 Python 做便是了。用它是因为它适合,跟它火不火无关。
|
11月前
|
程序员
什么是好代码/坏代码?给普通人的图解示例
什么是好代码/坏代码?给普通人的图解示例
79 0
|
11月前
|
Java 程序员 Python
十个Python程序员易犯的错误
十个Python程序员易犯的错误
|
12月前
|
Python
上古代码漫游记(二):把陷阱去掉了,反倒踩进了新的陷阱?
上古代码漫游记(二):把陷阱去掉了,反倒踩进了新的陷阱?
81 0
|
12月前
|
消息中间件 JavaScript 小程序
麻了,代码改成多线程,竟有9大问题 上
麻了,代码改成多线程,竟有9大问题 上
|
12月前
|
安全 Java 数据库连接
麻了,代码改成多线程,竟有9大问题 下
麻了,代码改成多线程,竟有9大问题 下
|
存储 Java
无聊小知识.04 以下代码会输出什么?
今天同事给我看了一段代码,然后这段简单的代码,我却陷入了沉思。
无聊小知识.04 以下代码会输出什么?
|
Python
又烧脑又炫技还没什么用,在代码里面打印自身
又烧脑又炫技还没什么用,在代码里面打印自身
159 0
又烧脑又炫技还没什么用,在代码里面打印自身