|
Perl - подскажите по синтаксису
|
|||
---|---|---|---|
#18+
Есть такая строчка: Код: php 1.
Переменная $str это строка, которая может содержать номер телефона. Функция check проверяет, соответствует ли строка определенным требованиям и возвращает 1 (если соответствует) или undef. Функция format нормализует и форматирует строку как телефонный номер. Строка в целом присваивает переменной $phone отформатированный телефонный номер, если этот номер корректен. Могу ли я заменить эту строку на такую? Код: php 1.
Если check возвращает undef, то там все понятно — при "ленивом" сравнении вторая функция не выполняется и выражение сразу возвращает undef. А вот если check возвращает 1, то в $phone оказывается результат функции format (как мне и надо), но я не уверен, что что-то не упускаю. ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 16:35 |
|
Perl - подскажите по синтаксису
|
|||
---|---|---|---|
#18+
Alibek B., Нагородил огород. Опять. Между тем обычный оператор s /ubstitute// делает именно это - проверяет строку на соответствие определённым требованиям и форматирует её при совпадении с последними. Более того, можно напомнить про клёвую возможность расположить оператор s/// или m// вертикально и выполнить любой код при совпадении частей шаблона, не покидая оператор. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 20:35 |
|
Perl - подскажите по синтаксису
|
|||
---|---|---|---|
#18+
Проверка и форматирование у меня нелинейные, я не уверен, что смогу их вписать в регулярные выражения. Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 21:37 |
|
Perl - подскажите по синтаксису
|
|||
---|---|---|---|
#18+
можно ещё наплюнуть на приличия и применить флип-флоп оператор троеточие: A ... B выглядеть это будет так: Код: perl 1. 2.
как это работает: на первом проходе оператор for отдаст в тело цикла $string , поместив ссылку на последнюю в переменную $_ . Флип-флоп первым делом дёрнет chk(); если chk() после вернёт true, то флип-флоп сработает, запомнит состояние и возвратится, приготовившись на следующем вызове дёрнуть fmt(), не трогая больше chk(). на втором проходе оператор for отдаст в тело цикла $phone , поместив ссылку на последнюю в переменную $_ . запомнивший своё состояние флип-флоп дёрнет fmt(), что нам и требовалось. если же, например, chk() на первом проходе решит, что совпадения с шаблоном не было, тогда chk() может вызвать оператор last и вывалиться нах из цикла for. реализация: Код: perl 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Итак, при вызове: Код: perl 1. 2. 3. 4.
должны увидеть: Inside chk:arg=11 Inside fmt:arg=3 Result = 9 а при вызове: Код: perl 1. 2. 3. 4.
должны увидеть: Inside chk:arg=эх-ма Result = 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 22:20 |
|
Perl - подскажите по синтаксису
|
|||
---|---|---|---|
#18+
Alibek, format, кстати, служебное слово. это нехорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 22:24 |
|
Perl - подскажите по синтаксису
|
|||
---|---|---|---|
#18+
Ну на самом деле функции у меня называются иначе, я их только здесь переназвал. А вот с ... решение выглядит интересно. Правда мне привычнее использовать функции возвращающие значения, но и в таком виде тоже нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 22:53 |
|
|
start [/forum/topic.php?fid=23&msg=39345047&tid=1460861]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 299ms |
total: | 422ms |
0 / 0 |