我有以下代码段
@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
。
我的脚本在上述语句中的逗号FS
和,
之后给出了一个特殊字符$value
(代码点28或0x1C)。当我在Notepad ++中粘贴输出时,我发现了这个特殊字符。
任何人都可以告诉我为什么我会得到这个特殊字符,以及是否有办法删除它?
由于这个特殊字符,我的数据库操作(在updateOperation子例程下)正在中止;由于此字符串作为更新操作的参数传递,如下所示:
sub updateOperation
{
my($trunkgrplist) = @_;
$UPDATE= "update TRUNKGROUP set source='D' where trunkgrpid in ($trunkgrplist)";
..
}
答案 0 :(得分:3)
无论出于何种原因,你都有相应的
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);