【发布时间】:2018-12-04 10:52:08
【问题描述】:
我正在编写一个脚本,该脚本收集我公司计算机的各种规格,并将其存储到数据库中。脚本的一部分在文件中搜索连接到计算机的信用卡读卡器的序列号。
我发现,如果我在 while 条件中不包含真/假检查,则正则表达式将被匹配,我可以从那里中断。没关系,这就是我要去的。不过我不明白,为什么当我将 while 条件更改为包含真/假检查时,正则表达式永远不会匹配。
这是我找到的作品
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";
但另一方面,follow 不起作用。
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 声明为空字符串并尝试&& $test ne "",正则表达式仍然永远不会匹配。
我已尽我所能进行了调试,我所知道的是,在使用 && !$test 时,永远不会发现 if($line =~ /unitid/i) 是真的。
&& !$test 的什么原因可能导致正则表达式永远不匹配,从而导致循环永远不会中断,而是贯穿整个文件?
【问题讨论】: