キャプチャつかってみた&module重複認識防止

#!usr/bin/env perl


$i= 0;


while($line = <>){

$i=$i+1;

if ( $line =~ m/^\s*module\s*([a-zA-Z0-9_]+)/ ) {
# print $_;
print $i;
print $line;
$modulename = $1; #()内をキャプチャして変数へ
}

# if ( $line =~ m/^\s*[A-Z0-9_]+\s+[a-z0-9]+\s*/ ) {
# if ( $line =~ m/^\s*[A-Z0-9_]+\s+[a-z0-9]+/ ) {
# if ( $line =~ m/^\s*[A-Z0-9_]+\s+[\\a-z0-9]+/ ) {
# 再度moduleでマッチしないように
if ( $line =~ m/^\s*[a-zA-Z0-9_]+\s+[a-zA-Z0-9\\\.\/]+/ && $line !~ m/^\s*module/) {
print $i;
print "$modulename,";
print $line;
# } elsif ( $line =~ m/^\s*[A-Z0-9_] && $line =~ m/
#
#
}

}


<サンプルテキスト>
module HOGEMODULE ( // No space

input hoge ;

output hogege;

reg aaa ;
reg aaa ; // hoge hoge hoge


for ( i=0 ; i<0 ; i++ ) begin


end

DUMMY Instance ();  //インスタンスに大文字あり

INST instance1 ( );  //インスタンス後半角sp
INST instance2( );  //半角spなし
INST \instance3 ( );  //インスタンス名先頭に \ あり
INST \insta/nce4 ( );  //インスタンス名中に / あり
INST \insta_nce5 ( );  //インスタンス名に _ あり
INST \insta7nce6 ( );  //インスタンス名の間に数字あり
INST insta.7nce7 ( );  //インスタンス名に . あり
INST
instance8 ( );  //改行あり


INST instance9 ( )  // ;記号なし
INST insta10 ( ); //忘れたw

INSTout inStance01 ( ); //モジュール名、インスタンス名に小/大文字混在

 

endmodule

module HOGE2 ( // space x 1 

);


endmodule


module HOGE3 ( // tab x 1
);
endmodule

 

module HOGE3 ( // tab x 1 + space x 2
);

endmodule


module HOGEreg001 ( //モジュール名に小文字あり
);

endmodule