我正在编写一个脚本,收集公司计算机的各种规格,并将其存储到数据库中。脚本的一部分在文件中搜索连接到计算机的信用卡读卡器的序列号。
我发现,如果在while条件中不包含true/false检查,那么正则表达式将被匹配,我可以从中中断。没关系,这就是我要做的。但我不明白,为什么当我将while条件更改为包含true/false检查时,regex永远不匹配。
这是我找到的工作
use v5.10;
use warnings;
use strict;
my $test;
open(my $fh, "<", "\\\\192.168.0.132\\storeman\\log\\2018-06-22.sls");
while(my $line = <$fh>){
if($line =~ /unitid/i){
$line =~ /(\d{3}\-\d{3}\-\d{3})/;
$test = $1;
last;
}
};
say $test // "Nothing found";
但另一方面,下面的方法不起作用。
use v5.10;
use warnings;
use strict;
my $test;
open(my $fh, "<", "\\\\192.168.0.132\\storeman\\log\\2018-06-22.sls");
while(my $line = <$fh> && !$test){
if($line =~ /unitid/i){
$line =~ /(\d{3}\-\d{3}\-\d{3})/;
$test = $1;
}
};
say $test // "Nothing found";
注意在每种情况下,
$test
未声明,直到正则表达式找到匹配。而且,即使在宣布
$测试
作为一个空字符串,并尝试
&& $test ne ""
,regex仍然不匹配。
我已经尽我所能调试了,我只知道当使用
&& !$test
,和
if($line =~ /unitid/i)
从来没有发现是真的。
这是关于
&&!$测试
这可能会导致regex永远不匹配,从而导致循环永远不会中断,而是运行整个文件?