2013-10-04 15 views
0

文件函數定義和函數聲明perl的 - 只能從函數的定義從函數聲明中提取,而不是

eErrorT ChainCtrlUpdateCameraRoute(ChainCtrlT* pChainCtrl, RouteListItemT* pNewRoute, RouteListItemT* pCurrRoute); 

eErrorT ChainCtrlSetJpgSnapshotFile(ChainCtrlT* pChainCtrl, RouteListItemT* pRoute, char * dst_chain, char *jpg_file_path) 
{ 

} 

我的代碼

use strict; 
use warnings; 
use vars qw(@temp $index $i); 

open(my $FILE, "< a.c") or die $!; 
my @arr = <$FILE>; 
foreach(@arr){ 
    if($_ =~ /^ \S+ \s+ \S+ \s* \((.+?) \) /xsmg) { # extracts function arguments 
     my $arg = $1; 
     my @arr = map /(\w+)$/, split /\W*?,\W*/, $arg; 
     print @temp = map "$_\n", @arr; 
    } 
} 

GIVES輸出

pChainCtrl 
pNewRoute 
pCurrRoute 
pChainCtrl 
pRoute 
dst_chain 
jpg_file_path 

輸出的必需

pChainCtrl 
pRoute 
dst_chain 
jpg_file_path 

我需要僅從函數定義(ChainCtrlSetJpgSnapshotFile)中提取參數,而不是聲明(ChainCtrlUpdateCameraRoute)。

我需要看是否帶(..)的行沒有「;」在同一行。但我無法得到它的正則表達式命令

+0

''//'不是Perl中的註釋,使用'#'表示。 '//'是「定義或」運算符。 – TLP

+0

這只是解釋代碼..實際代碼是比這更大。我只是給你一個樣本,我被卡住了 –

+0

爲什麼你不在一個負面的前瞻斷言中添加一個分號? '(?!\ s *;)' – TLP

回答

2

試圖瞭解什麼是技術(詞彙)差異,我看到一個「;」在定義的最後,並且不是「;」在宣言結束時。另外你有一個{在下一行。

利用這些功能(如果他們是consitent,手指x'ed)

#ignore lines with ; (followed by optional spaces) at the end 
print @temp = map "$_\n", @arr 
    unless $_ =~ /;\s*$/; 

的選項,可以查找{下一行,然後只打印前行,如果你有一個比賽,該行以{開始。 (留作練習...)

+0

完美。謝謝您的幫助 –

相關問題