【调试错误】正则表达式替换中使用变量

【调试错误】正则表达式替换中使用变量

这样一段代码

[Copy to clipboard] [ - ]
CODE:
164 sub fillup_table_new{
165     my ($table_file)=@_;
166     my $op_sur_ro="<";
167     my $op_sur_wo=">";
168     my $batch_name="";
169
170     open(TABLE, $op_sur_ro.$table_file) or die;
171     open(NEW, $op_sur_wo.$table_file.".out") or die;
172     while(<TABLE>){
173         if($_=~/^1\t/){
174             $batch_name=sprintf("%s",($_=~/^1\t([^\t][^\t]*)\t[^\t][^\t]*\t/));
175             print $batch_name."\n";
176             @t=&get_time($batch_name);
177             print $t[1]."\n";
178             print $t[2]."\n";
179             print $t[3]."\n";
180             $a=$t[1];
181             $b=$t[2];
182             $c=$t[3];
183             $_=~ s/(^1\t[^\t][^\t]*\t[^\t][^\t]*\t).*$/$1${a}\t${b}\t${c}/g;
184         }
185         print NEW $_;
186     }
187     close TABLE;
188     close NEW;
189 }

运行结果是
GGD09N02
2007年10月05日 22時09分38秒
2007年10月05日 22時09分39秒
1
Use of uninitialized value in substitution (s///) at ./genie_tcf_tool.pl line 183.
Use of uninitialized value in print at ./genie_tcf_tool.pl line 185.
有两个问题请教:
1. 从结果看是列表t的值是能够取得的,但是在183行的替换中使用这样的方式引用为什么就会出错?
2. perl的函数返回值如果是数组,列表,哈希表这些的情况下,是不是有深度拷贝之类的规则?

错误在哪里,百思得到其解。
soryy,一个低级错误。
185应该是
$str=~ s/(^1\t[^\t][^\t]*\t[^\t][^\t]*\t).*$/$1${a}\t${b}\t${c}/g;
走后print NEW $str;
就可以了。
因为是一边学一边写perl的,比较晕。
抱歉抱歉,干扰视听了,呵呵