2013-08-06 106 views
1

我有一個帶有函數名稱的文件FILE1。perl:僅打印函數定義名稱

FILE1(幾個功能命名過):

ChainCtrlBuildChain 

FILE2包含:

pChain = ChainCtrlBuildChain(pChainCtrl, pChainCtrl->ChainTable[i].col[j], pDefs); 
... 
if (eRetVal != kNoError) 
      { 
       ModTrace((ModT*) pChainCtrl, "ChainCtrlBuildChain: ERROR, chain init failure [chain: %4.4s inst: %d] [err: %d]\n", 
... 
VideoChainT* ChainCtrlBuildChain(ChainCtrlT* pChainCtrl, char* pChainName, ChainDefT* pDef) 
      { 
       ... 
      } 

我想只顯示函數定義和排除函數聲明。

輸出所需

VideoChainT* ChainCtrlBuildChain(ChainCtrlT* pChainCtrl, char* pChainName, ChainDefT* pDef) 

CODE

#search for function in the file 
use strict; 
use warnings; 

my $function_file = 'functions.txt'; 
my $src_file = 'ChainController.c'; 

open(my $ff,'<',$function_file) or die "Cant open $function_file: $!\n"; 
open(my $sf,'<',$src_file) or die "Cant open $src_file: $!\n"; 

my @array = <$ff>; 
my @array2 = <$sf>; 

close($ff); 
close($sf); 

foreach my $func (@array){ 
chomp $func; 
foreach my $src_line (@array2){ 
    if ($src_line =~ /$func\(/){ 
     print $src_line; 
    } 
    } 
} 

雖然後函數名檢查(但它表明這兩個函數聲明和函數定義。

關於如何在函數名稱相同的行上插入;的任何想法,因爲只有函數聲明在同一行中有;

回答

1

你可以用「沒有,直到行結束」:

/$func\([^;]+$/ 

注意,這可能仍然無法正常工作。如何使其工作達到100%的唯一方法是使用解析器。

+0

是的,你是對的,我會嘗試使用parser.but這也適用於我的測試case.Thanks –