五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

Perl 批量添加Copyright版權(quán)信息

發(fā)布日期:2021-12-30 00:01 | 文章來源:站長之家

對所有輸入文件,如果沒有版權(quán)信息則加上版權(quán)信息,否則什么都不做,并對原文件以.bak結(jié)尾備份。

開始我使用如下程序(嘗試前千萬先備份輸入的文件):

#!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;
}

結(jié)果:原文件和備份文件全部空白,真是糟糕。(切記以后測試程序時,要做好備份)。
分析原因:

主要是由于$^I使用錯誤。先來看看關(guān)于$^I的運作原理:

$^I 默認(rèn)值undef,這不會影響程序。如果將其賦值為某個字符串(如程序中的".bak"),程序?qū)?zhí)行備份操作,并將該字符串添加到原文件名后面,成為備份文件名的拓展名。使用鉆石操作符打開文件時,perl的操作是,先將打開的文件名改成加了拓展名的文件名,然后再新建一個原來的文件名的文件,然后在程序一行行讀入文件內(nèi)容并做一些改動后,會保存到新文件中去。這樣就相當(dāng)于修改了文件內(nèi)容,并將老文件進(jìn)行了備份。當(dāng)然,如果值是undef,則不會備份舊文件。

由于上面程序中將$^I = ".bak";放在最前面,但后面有兩次讀取文件操作。假設(shè)讀入文件為file.pl,第一次while(<>)將原文件變成了file.pl.bak。然后新建一個空文件命名為file.pl;但新文件只有程序結(jié)束的時候才會寫入磁盤中,所以接下來第二次讀取文件操作while(<>)時,將會把空白的file.pl變成file.pl.bak,這樣就覆蓋了第一次的備份文件,然后再新建一個新的空白文件file.pl,此時,包括原文件和備份文件內(nèi)容都是空白。

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

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

#!usr/bin/perl -w
my %do_these;
@ARGV = ("sinx.pl","nvidia.pl","changeName.pl");
foreach (@ARGV){
  print $_;
 $do_these{$_} = 1;
}
while(<>){
 if(/^## Copyright/){
  delete $do_these{$ARGV};
 }
}
@ARGV = sort keys %do_these;
$^I = ".bak";
while(<>){
 if(/^#!/){
  $_ .= "## Copyright (C) 2011 by yujianjun";
 }
 print;
}

這樣基本上就可以了,大家可以根據(jù)需要自行修改。希望大家多多支持本站。

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部