对所有输入文件,如果没有版权信息则加上版权信息,否则什么都不做,并对原文件以.bak结尾备份。

开始我使用如下程序(尝试前千万先备份输入的文件):

#!usr/bin/perl -w$^I = ".bak";my %do_these;

foreach (@ARGV){print $_;$do_these{$_} = 1;}

while(<>){if(/^## Copyright/){    delete $do_these{$ARGV};  }}

@ARGV = sort keys %do_these;while(<>){if(/^#!/){    $_ .= "## Copyright (C) 2011 by yujianjun";  }print;}

结果:原文件和备份文件全部空白,真是糟糕。(切记以后测试程序时,要做好备份)。
分析原因:

主要是由于$^I使用错误。先来看看关于$^I的运作原理:

$^I 默认值undef,这不会影响程序。如果将其赋值为某个字符串(如程序中的".bak"),程序将执行备份操作,并将该字符串添加到原文件名后面,成为备份文件名的拓展名。使用钻石操作符打开文件时,perl的操作是,先将打开的文件名改成加了拓展名的文件名,然后再新建一个原来的文件名的文件,然后在程序一行行读入文件内容并做一些改动后,会保存到新文件中去。这样就相当于修改了文件内容,并将老文件进行了备份。当然,如果值是undef,则不会备份旧文件。

由于上面程序中将$^I = ".bak";放在最前面,但后面有两次读取文件操作。假设读入文件为file.pl,第一次while(<>)将原文件变成了file.pl.bak。然后新建一个空文件命名为file.pl;但新文件只有程序结束的时候才会写入磁盘中,所以接下来第二次读取文件操作while(<>)时,将会把空白的file.pl变成file.pl.bak,这样就覆盖了第一次的备份文件,然后再新建一个新的空白文件file.pl,此时,包括原文件和备份文件内容都是空白。

理解了$^I的工作原理,程序就很容易修改了:

只需将$^I = ".bak";放到最后一个文件读取操作while(<>)之前就好了,如下:

 1 #!usr/bin/perl -w 2  3 my %do_these; 4 @ARGV = ("sinx.pl","nvidia.pl","changeName.pl"); 5  6 foreach (@ARGV){ 7     print $_; 8   $do_these{$_} = 1; 9 }10 11 while(<>){12   if(/^## Copyright/){13     delete $do_these{$ARGV};14   }15 }16 17 @ARGV = sort keys %do_these;18 $^I = ".bak";19 while(<>){20   if(/^#!/){21     $_ .= "## Copyright (C) 2011 by yujianjun";22   }23   print;24 }

转载于:https://www.cnblogs.com/yuyan/archive/2012/02/11/2346768.html

Perl文件处理示例——批量添加Copyright版权信息相关推荐

  1. 手把手教你为 PDF文件/论文自动批量添加书签/目录, 彻底告别手动添加书签的烦恼

    本文是众多使用技巧中其中的一篇, 全部使用技巧点击链接查看, 或直接查看本专栏其他文章, 保证你收获满满 我主页中的思维导图中内容大多从我的笔记中整理而来,相应技巧可在笔记中查找原题, 有兴趣的可以去 ...

  2. 使用 Visual Studio 2019 批量添加代码文件头

    应用场景介绍 在我们使用一些开源项目时,基本上都会在每个源代码文件的头部看到一段版权声明.一个项目或解决方案中源代码文件的个数少则几十,多则几千甚至更多,那么怎么才能给这么多文件方便地批量添加或者修改 ...

  3. c++ 添加按钮_使用 Visual Studio 2019 批量添加代码文件头

    应用场景介绍 在我们使用一些开源项目时,基本上都会在每个源代码文件的头部看到一段版权声明.一个项目或解决方案中源代码文件的个数少则几十,多则几千甚至更多,那么怎么才能给这么多文件方便地批量添加或者修改 ...

  4. 获取族_批量添加族参数(上)

    随着BIM技术在工程行业的普及,不少设备供应商也因此被拉下了水,一些项目的BIM实施细则就要求设备进场之前就必须提供设备的LOD400-500精度的BIM模型.BIM的精髓在于信息,做的再精细而没有信 ...

  5. springboot执行批量插入_springboot+Mybatis 注解\Xml两种方式批量添加数据

    1.使用注解的方式批量添加数据,在该方法中,传进来的参数是一个List集合,使用一个foreach 循环解析集合的数据,最后再批量保存到数据库,具体如下截图: 代码如下: //批量保存 @Insert ...

  6. wordpress文章页面添加版权信息的四种方法

    善意的转载者既使没有看到版权信息也会主动自觉地添加上原文出处,但是大部分站长都是直接采集的,如果我们在网站文章的尾部添加一个版权信息,大部分站长采集后也不回去特意把每篇采集来的文章都去除版权,所以为文 ...

  7. php批量给文件添加头部版权,给代码添加版权信息

    版权声明:本文系作者原创.未经许可,不得转载. 以前写的代码没有加上版权信息.后来要全部添加,一个一个添加当然很慢,于是写了一个脚本自动添加. 基本思路: 1.列出目录下所有文件 2.得到后缀名,根据 ...

  8. python读取pdf文档书签 bookmark_用Python为PDF文件批量添加书签

    平时看一些大部头的技术书籍,大多数都是PDF版的,而且有一些书籍是影印扫描版的,几百上千页的书,没有任何书签,想要找到一个章节的位置非常费劲.那么就想,能不能搞一个工具,来自动地为这些大部头的PDF书 ...

  9. linux批量在文件名前面加前缀,linux中批量添加文件前缀的操作

    linux中批量添加文件前缀的操作 需要在文件夹内所有txt文件的文件名前面添加"gt_"; 就是由原来的文件"xxx.txt"变成"gt_xxx.t ...

最新文章

  1. 这些个JAVA开源工具(那是相当地多啊)
  2. U3D 扩展方法 Dotween tolua
  3. 表单如何添加大的文本框_在 Flutter 中进行文本框的创建和设定
  4. 非线性回归模型(part1)--神经网络
  5. 控件setVisible为false会导致控件被移除
  6. JavaScript原生添加移除class的方法
  7. 小程序开发代码_快速学会微信小程序开发,无需懂代码!
  8. 学习hadoop需要什么基础
  9. linux查找有用日志常用技巧
  10. vue assets图片_Vue实战—如何细化Vue项目目录设计(2)
  11. linux ubuntu git报错fatal: unsafe repository git config --global --add safe.directory解决方案
  12. 安装红蜘蛛软件6.2教师机管理端后,无法显示学生机的解决方法
  13. Photoshop如何改变背景底色并调整照片尺寸和图像大小
  14. 6—CSS基础选择器(标签选择器、类选择器、id选择器)
  15. Invoking “cmake“ failed 没有安装serial 包
  16. 追踪高频交易——华尔街猎狼者(上)
  17. XP中如何配置和共享打印机
  18. php 以多种分隔符拆分字符串
  19. python机器学习案例-支持向量机建模及评估(完整代码+实现效果)
  20. mac下office文档自动恢复

热门文章

  1. 有助于改变你命运的5个处世潜规则
  2. 初创公司要严控会议时长,日会5-15分钟,周会不超30分钟
  3. 为什么很多人赚不到钱?
  4. 为什么要与下属建立良好的人际关系?
  5. 大家的芝麻信用分都是多少?
  6. SpringBoot配置绑定的两种方式
  7. SQL Server中的查询优化技术:基础
  8. sql 如何设置行级锁_如何使用SQL Server 2016行级安全性过滤和阻止数据访问
  9. linux下串口多线程通信 ,多串口收发数据错乱问题解决办法
  10. WPF 凭证分录控件