用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`;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM