2012-05-25 17 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

相關問題