2014-01-28 156 views
-2

的Perl格格功能我有一個包含這樣的事情工作不正常

name: A id: B cl: C 
name: D id: E cl: F 
name: I id: G cl: K 

我正在用grep內容CL後一個文件並將其存儲在一個陣列

  #!/usr/bin/perl 
      @success=qw(C J K L); 
      @arr=qw(P M C); 
      my $pattern="is present here"; 
      local $/; 
      open (<FILE>, sl.txt); 
      my $ln=<FILE>; 

      while($ln=<FILE>) 
      { 

      if($ln=~$pattern) 
      { 

      {local $/="\n"; @using=`grep "cl" sl.txt | cut -d " " -f 6 `;} 
         print "\n the using array is @using \n"; 
         print "$using[0] ,$using[1] \n"; 
         chomp(@using); 
         print" after chomp @using\n"; 
       foreach my $lb (@using) 
       { 
       if($lb eq $success[2]) 
       { 
        print " comparison true\n"; 
       }   
       else 
       { 
        print " false comparison\n"; 
       } 
       } 
       } 
      } 
      close(<FILE>); 

請爲什麼這個comaprison在失敗之後失敗了。爲Chomp @using前後格格@using相同

+0

您真的會得到'C D'而不是'C F'嗎? –

+1

如果我明白你在說什麼,'$ using [0]'包含'「C \ nD」'。 chomp從字符串的末尾刪除換行符,而不是從字符串的中間移除。 – DavidO

+0

什麼'使用Data :: Dumper; $數據::自卸車:: Useqq = 1;打印Dumper \ @using;'在@ @ using ='語句之後顯示? – ysth

回答

1

鑑於此腳本:

#!/usr/bin/env perl 
use strict; 
use warnings; 

my @using = qx{grep "cl:" sl.txt | cut -d " " -f 6}; 
print "Before:\n"; 
print "[$_]\n" foreach (@using); 
chomp @using; 
print "After:\n"; 
print "[$_]\n" foreach (@using); 

而且該數據文件sl.txt

name: A id: B cl: C 
name: D id: E cl: F 
name: I id: G cl: K 

的Perl 5.18.1在Mac OS X 10.9 .1收益率:

Before: 
[C 
] 
[F 
] 
[K 
] 
After: 
[C] 
[F] 
[K] 

這看起來像代碼行爲正確。當你把調試打印循環放到位時,你從每個腳本中得到什麼? (使用qx{ … }是寫回報價的另一種方式。)

+0

這是***不是***問題的最小再現。你也不使用你引用的數據文件 - 你在代碼中而不是'cl:'中尋找'Lab:'。請參閱遊戲 - 瞭解創建MCVE的含義[如何創建一個最小,完整,有效的示例?](http://stackoverflow.com/help/mcve)。我們會幫你的;你必須使我們能夠爲你提供幫助 - 通過提供一個能夠再現核心問題的小程序,而不是像你添加到問題中的110行......的東西。比如'/ path/sl.txt'也沒有幫助。爲了憐憫,用一個簡單的'sl.txt'路徑名! –

+0

嗨。對不起,我是perl的新手。所以沒有得到你。但我試圖grep後「cl」只。故障腳本給輸出在此之前: 「[C ˚F ]」 後: 「[C ˚F ]」 .. 「我只所示的U C和F」。我從同一個文件sl.txt grepping。但從正確的文件是「之前:[C] [F] [K]之後:[C] [F] [K]」如您所示 – user3095218