2012-05-25 13 views
1

如何检查是否定义了一个变量,并使用perl regex在数组中搜索两个模式?如何检查是否定义了一个变量,并使用perl regex在数组中搜索两个模式?

$/ = ""; # paragraph mode 

__Data__ 
#SCSI_test   # put this line into @arrayNewLines  
kdkdkdkdkdkdkdkd 
dkdkdkdkdkdkdkdkd 
- ccccccccccccccc # put this line into @arrayNewLines 


    while(<FILEREAD>) 
    { 
     chomp; 
     my @arrayOld = split('\n',$_); 

     foreach my $i (0 .. $#arrayOld) # using the foreach of index to remove the lines. 
     { 
      if($arrayOld[$i] =~ /-(.*)/ || /\#(.*)/) 
      { 
       my @arrayNewLines = $arrayOld[$i]; 
       splice @arrayOld,$i,1;    # remove lines from arrayOld 
       print "@arrayNewLines\n"; 
      } 
       print "@arrayOld\n"; 
     } 
    } 

此代码无法将每种类型的 - 或#行放入同一个@arrayNewLines数组。它只适用于第一个(/ - (。)/)模式,不适用于第二个(/#(。)/)。我需要它在这两种模式上搜索并定义$ arrayOld [i]变量以防止使用未初始化的消息。 我想定义

回答

0
if($arrayOld[$i] =~ /-(.*)/ || /\#(.*)/) 

这不工作,你觉得它的方式,出于同样的原因,这也不会觉得要:

if($x == 1 || 2) 

使用这个代替:

if($arrayOld[$i] =~ /-(.*)/ || $arrayOld[$i] =~ /\#(.*)/) 

就像你会用这个:

if($x == 1 || $x == 2) 
+0

感谢duskwuff,这工作,但我需要摆脱使用未初始化的价值消息 –

+0

@Joseph沃克:duskwuff提供了一个很好的解决方案,其中disjuncts可以在一个单一的正则表达式在未初始化的变量测试后组合(所以你不会获得这些消息):'if($ arrayOld [$ i] && $ arrayOld [$ i] =〜/ - | \#(。*)/)' – Kenosis

相关问题