从数据库中检索带单引号的字符串并存储在Perl中
我有一个SQL查询从数据库中检索带单引号的字符串并存储在Perl中,perl,special-characters,Perl,Special Characters,我有一个SQL查询 select name from Employee 输出: Sharma's 如何以perl字符串存储此输出 我尝试了以下方法: $sql =qq {select Name from Employee}; $Arr = &DataBaseQuery( $dbHandle, $sql ); $name = $Arr; 但当我打印$name时,我得到的输出是 Sharma::s 如何在$name中存储单个报价。 首先,根据我的经验,您列出的非标准
select name from Employee
输出:
Sharma's
如何以perl字符串存储此输出
我尝试了以下方法:
$sql =qq {select Name from Employee};
$Arr = &DataBaseQuery( $dbHandle, $sql );
$name = $Arr;
但当我打印$name时,我得到的输出是
Sharma::s
如何在$name中存储单个报价。- 首先,根据我的经验,您列出的非标准DBI/DBD exibits行为
- 如果不知道
的细节,就不可能得出结论性的答案,但可以形成一个合理的理论: 撇号在Perl中是一个有效的包分隔符,相当于“DataBaseQuery()
” 参考: 旧的包定界符是一个单引号,但现在首选的定界符是双冒号,部分原因是它对人类更具可读性,部分原因是它对emacs宏更具可读性。它也使C++程序员感觉他们知道发生了什么——而不是使用单一引用作为分隔符,这是为了让艾达程序员感觉他们知道发生了什么。因为旧式语法仍然支持向后兼容,如果您尝试使用类似“This is$owner's house”的字符串,您将访问$owner::s;也就是说,包所有者中的$s变量,这可能不是您的意思。使用大括号来消除歧义,如“这是${owner}的房子” 我强烈怀疑:
call中您自己的库中的某些东西被编写为“智能”,并因此将撇号转换为双冒号DataBaseQuery()
- 如果无法找出根本原因,则始终可以执行以下操作之一:
- 编写自己的数据库包装器
- 假设您的文本不可能包含“
”,请运行正则表达式来修复::
s::”\g对来自
的所有结果执行code>(可能是在充当DataBaseQuery()
DataBaseQuery()的包装器替换的函数中)
DataBaseQuery()
中有什么?需要更多的代码来回答您的查询。您使用什么机制来查询数据库?
perl -e 'package A::B; $A::B=1; 1;
package main;
print "double-colon: $A::B\n";
print "apostrophe: $A'"'"'B\n";'
double-colon: 1
apostrophe: 1