【发布时间】:2015-05-22 10:14:00
【问题描述】:
我有以下代码sn-p
@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)";
..
}
【问题讨论】:
-
推测
FS("\x1C") 字符已经存在于$trunkid变量中。该值的来源是什么? -
请添加以下
use Data::Dumper;$Data::Dumper::Useqq = 1;print Dumper \@trunkarray;并显示结果 -
trunkid 的来源来自表单,被选中的复选框是trunkid 的结果,由':'(冒号)分隔。
-
简单的答案是
tr/\x1C//d,但这是解决代码中单独错误的一种技巧。您应该修复错误而不是删除其影响。如果$trunkid的值是单个数据库列的内容,那么很可能是写入数据库的代码有问题,但您应该显示检索的 SQL 语句,以便我们确定 -
@PatrickJ.S.:那就是
split /:\x1C?/, $trunkid