Почему мой Perl-скрипт не может различить `0` и` "" `? - PullRequest
2 голосов
/ 19 января 2012

Perl Noob здесь - у меня есть следующий скрипт

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

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

Ответы [ 4 ]

7 голосов
/ 19 января 2012

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

3 голосов
/ 19 января 2012

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

if(substr($pc, 3,1) ne " "){
       $newpc = substr($pc, 0, 4) . " " . substr($pc, 4);
}
3 голосов
/ 19 января 2012

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

1 голос
/ 22 января 2012

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

Так что вы можете захотеть взглянуть на использование m// и / или s///.

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

Опять же, если вы имеете дело с почтовыми кодами Великобритании, вам может потребоваться поиск «Почтовый индекс»на CPAN или посмотрите Geo :: Почтовый индекс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...