2013-03-21 48 views
0

喜的朋友现在“M在Perl的工作,我需要用perl!我试过很多检查在一组阵列的给定串occurence但我不能任何人可以?在给出字符串中找到特定字符串的出现?

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"; 

    } 
} 

回答

1

这里有一个问题:

for(my $t=0;scalar @all_files;$t++){ 

的for循环的第二部分需要一个条件,如:书面永远不会结束

您的代码。

然而,这是好多了:

foreach (@all_files){ 

此外,你有你的正则表达式的问题。正则表达式中的变量被视为正则表达式。 .是一个匹配任何内容的特殊字符。因此,你的代码将匹配PGR.csv,也PGRacsv等。而这也将匹配文件名,其中是名称的一部分,如FOO_PGR.csvblah。为了解决这个问题:

  • 使用引号的文字(\Q...\E),以确保文件名是字面上处理。
  • 使用锚匹配字符串(^$)的开头和结尾。

此外,反斜杠是有效的,但它们是一个奇怪的字符使用。

修正后的正则表达式如下:

m/^\Q$file_name\E$/ 

此外,你应该把这个在每个脚本的顶部,你写:

use warnings; 
use strict; 
0

这条线:

for(my $t=0;scalar @all_files;$t++){ 

产生一个无限循环,你最好使用:

+0

如何使用正则表达式在Perl? – 2013-03-21 10:52:31

+0

当我试图在上面的脚本,如果(M/$ PGR /)这个工作,但第二内部条件不工作始终else块只执行花花公子 – 2013-03-21 10:54:30

0

除了您遇到的问题,您是否在寻找substr

相关问题