为什么我的Perl脚本不能区分“0”和“”“`?

时间:2012-01-19 15:01:00

标签: perl replace substr

Perl noob在这里 - 我有以下脚本

if(substr($pc, 3,1)!=" "){
       $newpc = substr($pc, 0, 4) . " " . substr($pc, 4);
}

它旨在为邮政编码添加一个空格,例如NN141NJ变为NN14 1NJ ...但是对于NN102DE这样的邮政编码它没有做任何事情,Perl会识别{{ 1}}和" "一样吗?我如何处理perl而不是忽略"0"作为第四个字母的字符串?

4 个答案:

答案 0 :(得分:7)

使用ne代替!=。后者用于数字比较,在这种情况下,两者都是0。见perldoc perlop

答案 1 :(得分:3)

当您想要使用!=(不等于)运算符时,您正在使用ne运算符。 !=是仅数字比较,而ne是字符串比较。

答案 2 :(得分:3)

这是因为perl需要在字符串比较和数字比较之间进行规范。您正在使用将“”转换为0的数字比较。请执行此操作:

if(substr($pc, 3,1) ne " "){
       $newpc = substr($pc, 0, 4) . " " . substr($pc, 4);
}

答案 3 :(得分:1)

在Perl中,这种字符串抨击通常使用正则表达式运算符完成。

因此,您可能希望使用m//和/或s///

请参阅perlop文档页面中的“Regexp Quote-Like Operators”,以及整个perlretut文档页面。

然后,如果您正在处理英国邮政编码,您可能需要search for "Postcode" on CPAN或查看Geo::Postcode