2012-01-19 3 views
2

Perl нуб здесь - у меня есть следующий сценарийПочему мой скрипт Perl не отличается от `0` и` `` `?

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

Он предназначен поставить пробел в почтовых индексах, например NN141NJ становится NN14 1NJ ... однако с почтовыми индексами, такими как NN102DE он ничего не делает, делает Perl признать " " и "0" как же? Как я могу использовать perl, не игнорируя строки с 0 как четвертое письмо?

+4

Он будет делать что-то, если вы 'использование предупреждений;'. Появится предупреждающее сообщение. – toolic

+2

I второй это. Используйте 'use strict; использовать предупреждения; ' – ikegami

+0

гораздо лучше заголовок @darch, это был долгий день - будет иметь в виду сообщения об ошибках, это было буквально в первый раз, когда я когда-либо пользовался perl – rickyduck

ответ

7

Использовать ne вместо !=. Последнее относится к числовым сравнениям, в которых оба имеют значение 0 в вашем случае. См. perldoc perlop

+0

cheers mate, я думал, что синтаксис будет почти идентичным на PHP, знал, что это слишком хорошо, чтобы быть правдой – rickyduck

3

Используется оператор !=, если вы хотите использовать оператор ne (неравный). != - это числовое сравнение, а ne - сравнение строк.

3

Это потому, что perl нуждается в спецификации между сравнением строк и цифровым сравнением. Вы используете числовое сравнение, которое будет конвертировать «» в 0. Сделайте это вместо того, чтобы:

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

В Perl, этот вид строки-трепку обычно делается с помощью операторов регулярных выражений.

Таким образом, вы можете посмотреть на использование m// и/или s///.

См. «Regexp Quote-Like Operators» на странице документации perlop, а также всю страницу документации perlretut.

Опять же, если вы имеете дело с британскими почтовыми индексами вы можете search for "Postcode" on CPAN или посмотреть на Geo::Postcode

+0

Предоставляет хорошую альтернативу, полезные ссылки, а я уже использую 'Geo :: Postcode' в другой части этого скрипта – rickyduck

Смежные вопросы