Resulta que el problema fue causado por un voltaje bajo. Se cambió la fuente de alimentación, se reinició el pi y se solucionó el problema.
Все в порядке, все работает как надо, но вы неправильно поняли, как работают регулярные выражения. .
означает «соответствует любому символу», поэтому .V15M
будет соответствовать DV15
в PADV15MA0
, поэтому вы получите:
FOUND PADV15MA0 IOP059_VOUT15_OUT (.IO(VOUT15_OUT)
FOUND.V15M(px_IOP059_VOUT15_OUT_V15M) );
Вы хотите что-то вроде:
#!/usr/bin/perl -w
my $var= '\.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
chomp;
@words=split(",",$_);
foreach my $word(@words){
if($word =~ /$var/){
print "FOUND",$word, "\n";
}
}
}
Это вернет:
FOUND.V15M(px_IOP059_VOUT15_OUT_V15M) );
Однако ваш код предполагает, что вам нужны только слова, так что если это так, разделите строку ввода пробелами, а не запятыми (в вашем файле нет запятых):
#!/usr/bin/perl -w
my $var= '\.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
chomp;
@words=split(" ",$_);
foreach my $word(@words){
if($word =~ /$var/){
print "FOUND ",$word, "\n";
}
}
}
Вы можете сделать это следующим образом:
$ perl -lsne 'print "FOUND: >>>$1<<<" if /(\Q$pin\E\((?:(?!\))\H)*\))/' -- -pin=".V15M" inp
Результат:
FOUND: >>>.V15M(px_IOP059_VOUT15_OUT_V15M)<<<
Рабочий: