嗨朋友们现在正在使用perl我需要使用perl检查一组数组中的字符串出现!我试过很多但是我不能有人吗?
open FILE, "<", "tab_name.txt" or die $!;
my @tabName=<FILE>;
my @all_files= <*>;
foreach my $tab(@tabName){
$_=$tab;
my $pgr="PGR Usage";
if(m/$pgr/)
{
for(my $t=0;scalar @all_files;$t++){
my $file_name='PGR.csv';
$_=$all_files[$t];
if(m\$file_name\)
{
print $file_name;
}
}
print "\n$tab\n";
}
}
答案 0 :(得分:1)
这是一个问题:
for(my $t=0;scalar @all_files;$t++){
for循环的第二部分需要是一个条件,例如:
for(my $t=0;$t < @all_files;$t++){
您编写的代码永远不会结束。
然而,这要好得多:
foreach (@all_files){
此外,你的正则表达式有问题。正则表达式中的变量被视为正则表达式。 .
是一个匹配任何内容的特殊字符。因此,您的代码将匹配PGR.csv
,还会匹配PGRacsv
等。它还会匹配名称中的文件名,例如FOO_PGR.csvblah
。要解决这个问题:
\Q...\E
)确保文字名称按字面意思处理。^
,$
)。此外,反斜杠有效,但它们是一个奇怪的角色可供使用。
更正的正则表达式如下所示:
m/^\Q$file_name\E$/
此外,您应该将它放在您编写的每个脚本的顶部:
use warnings;
use strict;
答案 1 :(得分:0)
这一行:
for(my $t=0;scalar @all_files;$t++){
产生无限循环,你最好使用:
for(my $t=0;$t < @all_files;$t++){
答案 2 :(得分:0)
除了您通过数组遇到的问题外,您还在寻找substr吗?