Perl脚本替换语法

时间:2014-03-27 15:16:34

标签: perl

以下是我的Perl脚本

str_replace(rtrim(c_manager),'''','_'),'."\n".
 throws error  

str_replace(rtrim(c_manager), '''"

_'之后的错误名称在pl_recert_output.pl第262行。

请帮助解决此问题:

$sql = 'select rtrim(f_admin_disabled),'."\n".
                '       convert(varchar,t_password,101),'."\n".
                '       rtrim(c_email),'."\n".
                '       str_replace(rtrim(c_manager),'''','_'),'."\n".
                '       rtrim(c_mgr_email)'."\n".
                '  from tuserprofile'."\n".
                ' where ic_user1 = '."'$user_id'"."\n";

2 个答案:

答案 0 :(得分:3)

您的单引号字符串中有单引号。

引号字符串中的单引号必须使用\'进行转义。

但是,最好使用multi-line quoting syntax来获得更干净的代码:

$sql = <<EOF;
select rtrim(f_admin_disabled),
       convert(varchar,t_password,101),
       rtrim(c_email),
       str_replace(rtrim(c_manager),'''','_'),
       rtrim(c_mgr_email)
    from tuserprofile
    where ic_user1 = '$user_id'
EOF
;

这有预期的结果,没有乱码转义和字符串连接。

答案 1 :(得分:0)

您需要转义变量赋值中的单引号:

my $user_id = 'test';
my $sql = 'select rtrim(f_admin_disabled),'."\n".
            '       convert(varchar,t_password,101),'."\n".
            '       rtrim(c_email),'."\n".
            '       str_replace(rtrim(c_manager),\'\'\'\',\'_\'),'."\n".
            '       rtrim(c_mgr_email)'."\n".
            '  from tuserprofile'."\n".
            ' where ic_user1 = '."'$user_id'"."\n";

print $sql;

结果:

   select rtrim(f_admin_disabled),
   convert(varchar,t_password,101),
   rtrim(c_email),
   str_replace(rtrim(c_manager),'''','_'),
   rtrim(c_mgr_email)
   from tuserprofile
   where ic_user1 = 'test'

检查这是否是您期望的结果。