#!/usr/bin/perl -w use strict; use 5.016; my @dirs = glob("*"); #收集目录,程序只遍历两级目录,不用递归 sub renamedire{ #更改目录名 例5-1改为ex5_1 foreach my $dir (@dirs){ if(-d $dir){ my $newdir = $dir; $newdir =~ s/(.*)-(.*)/ex$1_$2/g; rename $dir, $newdir; } } } sub renamedire1{ #改回去目录名 例ex5_1改回5-1 foreach my $dir (@dirs){ if(-d $dir){ my $newdir = $dir; $newdir =~ s/ex(.*)_(.*)/$1-$2/g; rename $dir, $newdir; } } } sub modifile{ #修改java文件,加包名,只加当前目录名,例在ex5_1下,加package ex5_1; my ($file_name, $dir_name) = @_; open my $fh1,$file_name or die "Not Open: $!"; open my $fh2,"> $file_name.bak" or die "Not Open: $!"; my @strs=<$fh1>; unshift @strs,"package $dir_name;\n"; foreach my $str (@strs){ print $fh2 "$str"; } close $fh2; close $fh1; ulfile($file_name, "$file_name.bak"); #删原来文件,改新文件名 } sub modifile1{ #修改java文件,删包名; my $file_name = shift @_; open my $fh1,$file_name or die "Not Open: $!"; open my $fh2,"> $file_name.bak" or die "Not Open: $!"; my @strs=<$fh1>; foreach my $str (@strs){ if ($str=~/^package/) { print $fh2 ""; } else{ print $fh2 "$str"; } } close $fh2; close $fh1; ulfile($file_name, "$file_name.bak"), } sub opdirf{ #遍历文件夹 my $dir = shift; my $count; if(-d $dir){ chdir $dir or die "can't chdir $dir: $!"; #进入文件夹 my @files=glob("*.java"); foreach my $file (@files){ ++$count; modifile1($file); modifile($file, $dir); } if ($count eq @files) { #跳出文件夹 chdir "\.."; } }
} sub ulfile{ #删旧文件,改新文件 my ($file1, $file2) = @_; my $newfile = $file1; unlink $file1; rename $file2, $newfile; }
&renamedire(@dirs); #更改目录名 #&renamedire1(@dirs); #改回目录名 @dirs=glob("*"); #收集更改后目录名
foreach my $dir (@dirs) { #操作目录 &opdirf($dir); }
|