Perl noob在这里 - 我有以下脚本
if(substr($pc, 3,1)!=" "){
$newpc = substr($pc, 0, 4) . " " . substr($pc, 4);
}
它旨在为邮政编码添加一个空格,例如NN141NJ
变为NN14 1NJ
...但是对于NN102DE
这样的邮政编码它没有做任何事情,Perl会识别{{ 1}}和" "
一样吗?我如何处理perl而不是忽略"0"
作为第四个字母的字符串?
答案 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