perl:仅打印函数定义名称

时间:2013-08-06 11:15:12

标签: perl

我有一个带有函数名的文件FILE1。

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 个答案:

答案 0 :(得分:1)

你可以使用&#34;没有;直到行结束&#34;:

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

请注意,这可能仍然无效。如何使其100%工作的唯一方法是使用解析器。