Perl 6 Language
目前perl6对GB2312的文件支持的不好,请转换为UTF-8的输入文件。简单尝试了一下将之前用perl5写的这个脚本改成了perl 6(未使用额外的包)。
与perl 5有些区别,比如?: 换成了?? !! 等,更多的请参考Synopsis 。
use v6;
my $dir = '.';
my \TABLEN = 4;
find(&underscores,$dir);
sub find($func,$dir) {
my @todo = $dir.IO;
while @todo {
for @todo.pop.dir {
@todo.push($_),next if $_.d;
&$func($_) if $_.f && /(\.c$)|(\.h$)/;
}
}
}
sub underscores($filename){
my $hOldfile = open($filename, :r);
my $newfilename = $filename~'.'~1000.rand.Int~'.tmp';
my $hNewfile = open($newfilename, :w);
my Int $flag = 0;
for $hOldfile.lines <-> $_ is rw {
for m:global/\t/ -> $d {
my $curindex = $d.to;
my $tmp = ' ' x (($curindex % TABLEN) ?? (TABLEN + 1 - $curindex % TABLEN) !! 1);
s/([\t]**1)/$tmp/;
$flag +|= 1;
}
$flag +|= 2 if s/\s+$//;
$hNewfile.print($_~"\x0d\x0a");
}
$hOldfile.close;
$hNewfile.close;
if $flag {
chmod(0o755, $filename);
copy($newfilename, $filename);
say "$filename modify complete. %%%%%%%%%%%%% code [$flag].";
}
else {
say "$filename isn't change.";
}
unlink($newfilename);
}
1;