#!/usr/bin/perl
while(<STDIN>){
chomp;
if(/(?<name1>\b\w+a\b)/g){
print "Matched:|$`<$&>$'|\n";
print "\'word\' contains \'$+{name1}\'";#注意反向引用
}
else{
print "No match: |$_|\n";
}
}
#!/usr/bin/perl
use strict;
my $in=$ARGV[0];
unless(defined $in){
die "Usage:$0 filename"; #$0含有正在执行的文件名
}
my $out=$in;
$out=~ s/(\.\w+)?$/.out/;
unless(open IN,"<d:/2.txt"){die "Can't open :$!";}
unless(open OUT,">$out"){die "Can't open :$!";}
while(<IN>){
s/fred/Larry/gi;
print OUT $_;
}
#!/usr/bin/perl
my %do_these;
foreach (@ARGV){
$do_these{$_}=1;
}
while(<>){
if(/##Copyright/){
delete $do_these{$ARGV};#当前正在读取的命令行参数可用$ARGV取得
}
}
@ARGV = sort keys %do_these;
while(<>){
if(/^#!/){
$_ .= "##Copyright (c) 20XX by Yours Truly \n";
}
print;
}
#!/usr/bin/perl
unless(open NUM,"d:/3.txt"){die "Can't open : $!";}
while(<NUM>){
push @numbers,split;#输入的第一行看作是一个字符串,所以要用split隔开
#split 如果后面没有参数时默认为 split /\s+/ ,$_
}
foreach(sort {$a<=>$b} @numbers){#按数字顺序排序
printf "%20g\n",$_;
}
close NUM;
open(A,"test.txt");
while(my $line=<A>){
chomp $line;
@sss = split("\t",$line);
$save{$sss[2]} =$line;
}
close(A);
my @key =sort {$b <=> $a} keys %save;
for my $i(@key){
print $save{$i};
}
#!/usr/bin/perl
my %last_name = (
'fred' => 'flintsone',
'Silma' => 'filntsone',
'Barney' => 'Rubble'
);
sub by_name{
"\L$last_name{$a}" cmp "\L$last_name{$b}" #以ASCII顺序(非字典顺序)进行sort
or
"\L$a" cmp "\L$b"
}
my @result = sort by_name keys %last_name;
foreach (@result){
print "$last_name{$_},$_\n";
}
#!/usr/bin/perl
#功能:比对两个文件的数据
unless (open FILE ,"<d:/verify_data_output.txt"){die "Can't open file : $!"};
unless (open VFYMDF ,">d:/vfy_mdf.txt"){die "Can't open file : $!"};
$line = 0;
while(<FILE>){
if($line == 0){#去除第一行数据
s/.*//;
s/\s+//;
}
else{
chomp($_);
my $h=hex($_);#十六进制转为十进制
my $bin=sprintf("%027b",$h); #十进制转为二进制
$bin =~ s/^(d{25})/$1 /;
my ($valid,$f) = split /\s+/,$bin;#提取前25位数据
print VFYMDF "$valid\n";
}
line++;
}
close FILE;
close VFYMDF;
#!/usr/bin/perl
#批量重命名
chdir "d:/ex" or die "Can't chdir to d:/ex:$!";
foreach my $file (glob "*.bak"){#glob读取一个目录下的所有文件
my $newfile = $file;
$newfile =~ s/\.bak$//;
if(-e $newfile){
warn "can't rename $file to $newfile:$newfile exists\n";
}
elsif(rename $file,$newfile){}
else{
warn "rename $file to $newfile failed : $! \n";
}
}
#!/usr/bin/perl
unless(open FILE,"d:/4.txt"){die "Can't open file : $!";}
my @f_n = <FILE>;
foreach $num (0..$#f_n){
unless(open MGG,"<$f_n[$num]"){die "Can't open file : $!";}
unless(open OUT,">$f_n[$num].bak"){die "Can't open file : $!";}
&delete_part_file;
}
sub delete_part_file{
#$^I = ".bak"; #只能和钻石操作符配合使用
my $line = 0;
while($tem = <MGG>){
if($line<=3){#删除前四行
$tem=~ s/.*//;
$tem=~ s/\s+//;
}
elsif(/__END__/){
$line=0;
close MGG;
last;
}
else{
print OUT "$tem";
}
$line++;
}
}
#!/usr/bin/perl
unless(open FILE,"<D:/4.txt"){die "Can't open file : $!";}
my @f_n = <FILE>;
foreach $num (0..$#f_n){
unless(open MGG,"+<$f_n[$num]"){die "Can't open file : $!";}#先读后写
unless(open OUT,">$f_n[$num].bak"){die "Can't open file : $!";}
&delete_part_file;
}
sub delete_part_file{
#$^I = ".bak"; #只能和钻石操作符配合使用,用于产生文件的备份
my $line = 0;
while($tem = <MGG>){
if($tem=~/\n/){
$currentpos=tell;#返回文件句柄当前位置
last;
}
}
seek(MGG,$currentpos,0);#0:文件开头,1:当前位置,2:文件末尾
print MGG "hello !\n";
}