??????峤 发表于 2015-12-26 07:24:38

用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`;
页: [1]
查看完整版本: 用perl实现的文件头注释工具