从数据库中检索带单引号的字符串并存储在Perl中

从数据库中检索带单引号的字符串并存储在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中存储单个报价。 首先,根据我的经验,您列出的非标准

我有一个SQL查询

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行为

  • 如果不知道
    DataBaseQuery()
    的细节,就不可能得出结论性的答案,但可以形成一个合理的理论:

    撇号在Perl中是一个有效的包分隔符,相当于“

    参考:

    旧的包定界符是一个单引号,但现在首选的定界符是双冒号,部分原因是它对人类更具可读性,部分原因是它对emacs宏更具可读性。它也使C++程序员感觉他们知道发生了什么——而不是使用单一引用作为分隔符,这是为了让艾达程序员感觉他们知道发生了什么。因为旧式语法仍然支持向后兼容,如果您尝试使用类似“This is$owner's house”的字符串,您将访问$owner::s;也就是说,包所有者中的$s变量,这可能不是您的意思。使用大括号来消除歧义,如“这是${owner}的房子”

    我强烈怀疑
    DataBaseQuery()
    call中您自己的库中的某些东西被编写为“智能”,并因此将撇号转换为双冒号

  • 如果无法找出根本原因,则始终可以执行以下操作之一:

  • 编写自己的数据库包装器
  • 假设您的文本不可能包含“
    ::
    ”,请运行正则表达式来修复
    s::”\gDataBaseQuery()
    的所有结果执行code>(可能是在充当
    DataBaseQuery()的包装器替换的函数中)

您使用的是什么版本的perl?
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