2013-10-09 2 views
2
............ 
########### NEED TO PUT ARGUMENTS HERE AS COMMENT ######### 
eErrorT ChainCtrlInitChains(ChainCtrlT* pChainCtrl, 
    char* name, 
    int instance, 
    void* pOwner, 
    ) 
    { 
     .... 
    } 
    ......... 

저는 함수 정의 위에 주석으로 주석을 달아서 넣고 싶습니다. 비슷한 기능 정의가 많이 있습니다. 나는 $ STR를 사용할 때perl - 함수 정의에서 인수를 추출하여 주석 위에 올려 놓습니다.

open(my $FILE1, "< a.c") or die $!; 
@arr = <$FILE1>; 

foreach(@arr){ 
    if($_ =~ /^ \S+ \s+ \S+ \s* \((.+?) \) /xsmg) {    
     my $arg = $1; 
     my @arr = map /(\w+)$/, split /\W*?,\W*/, $arg; 
     print @temp = map ' * @param[in/out] '."$_\n", @arr 
      unless $_ =~ /;\s*$/; 
    } 
} 

그것은 작동하지만, 그때는 함수 정의 위의 주석으로 인수를 스플 라이스 수 없습니다. 여기

$str = <$FILE1>;  

답변

2

당신은 이동 :

use File::Copy; 
open my $FILE,'<','a.c' or die "open failed: $!\n"; 
$file_slurp = do { local $/;<$FILE>}; 
$file_slurp =~ s{^(\w+ \s+ \w+ \s* \((.+?) \))}{&print_args($2,$1)}xmesg; 
close($FILE) or die "Couldn't close file: $!\n"; 
copy "a.c","a.c.bak" or die "Copy failed: $!\n"; 
open my $NEW_FILE,'>','a.c' or die "Truncating a.c failed: $!\n"; 
print $NEW_FILE $file_slurp and unlink "a.c.bak"; 

sub print_args { 
    ($args,$proto) = @_; 
    @comments = map { ' * @param[in/out] '."$_" } split /\s*(?:^|,)\s*/,$args; 
    return join "\n",(@comments,$proto) 
} 

테스트 코드를 먼저 소스의 백업 복사본이 디스크에 보관되도록 unlink을 제거하여. 자신이 원하는대로 할 수 있다고 확신하면 원래 파일이 제자리에서 수정 된 것처럼 링크 해제를 되돌릴 수 있습니다.

+0

은 print_args의 ($ 2, $ 1) 인수가 아닌 출력을 볼 수 없습니다. –

+0

@ Ad-vic 원본 파일을 자르고'$ file_slurp'를 출력해야합니다. 죄송합니다. 해당 부분을 추가하는 것을 잊었습니다. '$ 1'은 전체 함수 프로토 타입이고'$ 2'는 인수 목록입니다. –

+0

감사합니다. 좋은 방법입니다. –

관련 문제