函数调用返回点出错的问题

函数调用返回点出错的问题
弟兄们好:
我今天遇到了一个奇怪的函数调用的问题,不知弟兄们以前有没有遇见过。
是这样的:
我有个函数用来将中文括号改成英文半角括号:

sub replace_par{
my $str = shift;
$str =~ s/\xA3\xA8/\(/;
$str =~ s/\xA3\xA9/\)/;
return $str;
}
然后,我在主程序中调用这个函数,当然,是在几个调用嵌套里,大致的嵌套结构如下:
... ...
##打开一个文件,然后一行行读
open(F,"<aaa.txt");
while(<F>){
... ...
#根据行里的内容,拼接要调用的函数名
my $progName = $conf->{'feedname'} . '_slicecheck';
#调用拼接的函数
my ($ret,$outline) = &$progName($conf,$data,$store);

if ($ret == 2){
... ...
};
print OUTPUT "$outline\n" if ($ret==0);
}
close(F);
close(OUTPUT);

exit(0);

#然后,那个被调用的程序是:
#p4sup是先前拼接的变量内容
sub p4sup_slicecheck{
my $conf = shift;
my $data = shift;
my $store = shift;

#调用replace_par函数,把中文括号替换掉
$$data->{'english_name'} = replace_par($data->{'english_name'}) if $data->{'english_name'} =~ /\xA3\xA8/
$l = length($data->{'english_name'});
$data->{'english_name'} .= ' ' x (100 - $l) if ($l < 100);

... ...
}

那么,按道理调用replace_par后,系统应该返回到“$l = length($data->{'english_name'})” 那一句,可是系统居然一下子跳到主程序的”close(OUTPUT);“,要处理的文件的余下的那些行也没有处理。

有人也遇到过这种函数返回指针错误的问题吗?

先谢谢了:)