Perl 대량 Copyright 저작권 정보 추가

2093 단어 Perl판권
모든 입력 파일에 대해 저작권 정보가 없으면 저작권 정보를 추가합니다. 그렇지 않으면 아무것도 하지 않고 원본 파일에 대해.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"를 사용합니다.맨 앞에 놓지만 뒤에 두 번의 파일 읽기 작업이 있습니다.파일을 파일로 읽는 것을 가정합니다.pl, 처음 while(<>)에서 원본 파일을 파일로 변경했습니다.pl.bak.그리고 새 빈 파일을 파일로 명명합니다.pl;그러나 새 파일은 프로그램이 끝날 때만 디스크에 기록되기 때문에 다음 두 번째 파일 읽기 작업while (<>) 을 할 때 공백 파일이 됩니다.pl이 파일로 바뀝니다.pl.bak, 이렇게 하면 첫 번째 백업 파일을 덮어쓰고 새 공백 파일 파일을 만들 수 있습니다.pl, 이때 원본 파일과 백업 파일을 포함한 내용이 공백입니다.
$^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;
}
이렇게 하면 기본적으로 된다. 여러분은 필요에 따라 스스로 수정할 수 있다.많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기