+ -
当前位置:首页 → 问答吧 → 请高手指点下面的Code, 非常感谢

请高手指点下面的Code, 非常感谢

时间:2010-08-10

来源:互联网

看了下面的代码,有点不理解,请高手帮忙。
特别是下面4句,请指点:
my $a_to_b='$p=pos($cur);vec($_,$p, == 97 ? a:b;';
my $b_to_a='$p=pos($_);vec($cur,$p, == 97 ? 0:push @delay_trans,$p;a;';
$cur =~ s/a/$a_to_b/eeg;
map {vec($cur,$_,=98 }@tmp if(@tmp);


程序代码:
  1. open F,"t.data" or die "open file failed ";
  2. my $cur=<F>;
  3. my @delay_trans;
  4. my $a_to_b='$p=pos($cur);vec($_,$p,8) == 97 ? a:b;';
  5. my $b_to_a='$p=pos($_);vec($cur,$p,8) == 97 ? 0:push @delay_trans,$p;a;';
  6. while(<F>){
  7.     next if($_=~/^\s*$/);
  8.     my @tmp=@delay_trans;
  9.     @delay_trans=();
  10.     $cur =~ s/a/$a_to_b/eeg;
  11.     $_ =~ s/a/$b_to_a/eeg;
  12.     map {vec($cur,$_,8)=98 }@tmp if(@tmp);
  13.     print $cur ;
  14.     $cur=$_;
  15. }
  16. map {vec($cur,$_,8)=98 }@tmp if(@delay_trans);
  17. print $cur ;
复制代码
数据 t.data
  1. 1 1 1 1 1 1 1 0 a a a
  2. 1 1 1 1 1 1 1 0 a a a
  3. 1 1 1 1 1 1 1 0 a a a
  4. 1 1 1 1 a 1 1 0 a a a
  5. 1 1 1 a a a a a a a a
  6. 1 1 1 a a a a a a a a
  7. 1 0 0 a a a a a a a a
  8. 1 0 0 a 0 a a a a a a
  9. 1 0 0 0 0 0 0 0 a a a
  10. 1 0 0 0 0 0 0 0 a a a
  11. 1 0 0 0 0 0 0 0 a a a
  12. 1 0 0 0 0 0 0 0 1 1 a
  13. 1 0 0 0 0 0 0 0 1 1 a
复制代码

作者: MicoCN   发布时间: 2010-08-10

pos ,vec都是一个函数,至于这两个函数干什么的··你可以查一下大骆驼··
$cur =~ s/a/$a_to_b/eeg;表达式中的的e是把正则的后半部分即系$a_to_b当作表达式执行,$a_to_b内容为:$p=pos($cur);vec($_,$p,8) == 97 ? a:b;

作者: wfnh   发布时间: 2010-08-10