我有以下代码片段
@trunkarray = split(/:/,$trunkid);
my $compString = "";
foreach $value ( @trunkarray ) {
print "<TR> <TD> $value </TD> </TR>";
if ( ! ($compString) ) {
$compString = "$value";
}
else {
$compString = $compString . ",$value";
}
}
&updateOperation($compString);
将$CompString
变量发送给updateOperation
。
在上面的语句中,我的脚本在逗号,
和$value
之后给出了一个特殊字符FS
(代码点28或0x1C)。当我在notepad++中粘贴输出时,我发现这个特殊字符出现了。
谁能告诉我为什么我得到这个特殊字符,如果有一种方法来删除它?
由于这个特殊字符,我的数据库操作(在updateOperation子例程下)正在被中止;当此字符串作为更新操作的参数传递时,如下所示:
sub updateOperation
{
my($trunkgrplist) = @_;
$UPDATE= "update TRUNKGROUP set source='D' where trunkgrpid in ($trunkgrplist)";
..
}
不管什么原因,你有一个等效的
my $compString = "428331:x{1C}428332:x{1C}428333";
你可以用
修复它$compString =~ s/x1C//g;
或
$compString =~ tr/x1C//d;
代码变成
sub updateOperation { # XXX Bad name
my @trunk_grp_ids = @_;
while (@trunk_grp_ids) {
my $trunk_grp_ids_list =
join ', ',
map $dbh->quote($_),
splice(@trunk_grp_ids, 0, 500);
$dbh->do("
UPDATE TRUNKGROUP
SET source='D'
WHERE trunkgrpid in ( $trunk_grp_ids_list )
");
}
}
my $compString = "428331:x{1C}428332:x{1C}428333"; # XXX Bad name
$compString =~ tr/x1C//d;
my @trunk_grp_ids = split /:/, $compString;
updateOperation(@trunk_grp_ids);