用perl实现的文件头注释工具

最近想开源一套软件,对于一些代码都要在文件头上加上固定格式的版本信息。自己用perl写了一个小工具,拿出来分享。

下载地址:http://files.cnblogs.com/xjon/comments.zip

 

  1 #!/usr/bin/perl -W

  2 #

  3 # Copyright (c) 2014 Nijie. All rights reserved.

  4 # License: GPL-2

  5 #

  6 # File: comments.pl  用于增加c/c++文件注释

  7 # Create by Nijie 2014.07.23

  8 #

  9 

 10 use strict;

 11 use warnings;

 12 use File::Copy;

 13 

 14 my $author='Nijie';            # 作者 - 需修改

 15 my $createyear='2014';        # 版权时间 - 需修改

 16 my $date="2014.07.23";        # 文件创建时间 - 需修改

 17 

 18 # 以下版权信息 - 需修改

 19 my $comments="// Created by $author on $date.

 20 // Copyright (c) $createyear $author. All rights reserved.

 21 // Use of this source code is governed by a GPL-2 license that can be found in the LICENSE file. 

 22 //

 23 ";

 24 

 25 my @filterDir = ("./lib3rd/");    # 需要过滤的文件,比如不属于你开发的目录等 - 需修改

 26 

 27 my %filterList = ();

 28 foreach (@filterDir)

 29 {

 30     $filterList{$_} = 1;

 31 }

 32 

 33 my ($dircnt, $filecnt) = (0, 0);

 34 

 35 sub lsr_s($) {

 36     my $cwd = shift;

 37     my @dirs = ($cwd.'/');

 38 

 39     my ($dir, $file);

 40     while ($dir = pop(@dirs)) {

 41         if (exists($filterList{$dir}))

 42         {

 43             print "skip dir : $dir\n";

 44             next;

 45         }

 46         local *DH;

 47         print "open $dir\n";

 48         if (!opendir(DH, $dir)) {

 49             warn "Cannot opendir $dir: $! $^E";

 50             next;

 51         }

 52         foreach (readdir(DH)) {

 53             if ($_ eq '.' || $_ eq '..') {

 54                 next;

 55             }

 56             $file = $dir.$_;         

 57             if (!-l $file && -d _) {

 58                 $file .= '/';

 59                 push(@dirs, $file);

 60             }

 61             process($file, $dir);

 62         }

 63         closedir(DH);

 64     }

 65 }

 66 

 67 sub process($) {

 68     my $file = shift;

 69     print "process $file";

 70     if (substr($file, length($file)-1, 1) eq '/') {

 71         $dircnt++;

 72     }

 73     else {

 74         $filecnt++;

 75         if ($file =~ /\.(h$|c$|cpp$|hpp$|cc$)/)

 76         {

 77             addComments($file);

 78         }

 79     }

 80     print "\n";

 81 }

 82 

 83 sub addComments($)

 84 {

 85     my $line = 0;

 86     my $file = shift;

 87     open FILE, $file or die 'die ($!)';

 88     open OUTFILE, ">$file~~~" or die "Open the file $file~~~ failed!\n";

 89 

 90     print OUTFILE $comments;

 91     while (<FILE>)

 92     {

 93         print OUTFILE $_;

 94     }

 95     close FILE;

 96     close OUTFILE;

 97     move("$file~~~", $file);

 98 }

 99 

100 lsr_s('.');

101 print "$filecnt files, $dircnt directory.\n";

102 `pause`;

你可能感兴趣的:(perl)