2013-09-20 3 views
0
#include <stdint.h> 
#include <stdlib.h> 
#include <VideoInChain.h> 
#include <VideoOutChain.h> 
#include <stdint.h> 
#include <stdlib.h> 
...//rest of code 

Есть файлы системы заголовков дублирования, которые нужно удалить, не затрагивая остальную часть кодаКак удалить повторяющиеся директивы #include?

Я попытался

sub uniq { 
    my %seen =(); 
    my @r =(); 
    foreach my $a (@_) { 
    unless ($seen{$a}) {   
     push @r, $a; 
     $seen{$a} = 1; 
     } 
    } 
    return @r; 
    } 
    @lines_temp = uniq(@lines_temp); 

но она удаляет все виды дублирования, включая «(», «{» и пробелы

Мне нужно удалить только дублировать системные файлы

ответ

6
sub uniq { 
    my %seen; 
    my @r; 
    for my $a (@_) { 
    my ($m) = $a =~ /#include\s+<(.+?)>/; 
    push @r, $a if !$m or !$seen{$m}++; 
    } 
    return @r; 
} 
@lines_temp = uniq(@lines_temp); 

или

sub uniq { 
    my %seen; 
    return grep { 
    my ($m) =~ /#include\s+<(.+?)>/; 
    !$m or !$seen{$m}++; 
    } @_; 
} 
@lines_temp = uniq(@lines_temp); 

или Oneliner,

perl -ne '($m) = /#include\s+<(.+?)>/; print if !$m or !$s{$m}++' file 
+0

сво большой сценарий и я новичок в perl.i нужна помощь, чтобы запустить его в сценарии, а не запускать его из ЦМД –

+0

@ user2628315 проверки обновление –

+0

спасибо .it отлично работает сейчас. Но может ли plz дать ссылку на какой-то материал или объяснить короче, что это значит \ s + <(.+?)>/ –

Смежные вопросы