Как сравнить две строки в Perl?
Я изучаю Perl, этот основной вопрос я нашел здесь, в StackOverflow, и не нашел хорошего ответа, так что я решил спросить.
Как сравнить две строки в Perl?
Я изучаю Perl, этот основной вопрос я нашел здесь, в StackOverflow, и не нашел хорошего ответа, так что я решил спросить.
Ответы:
Смотрите perldoc perlop . Используйте
lt
,gt
,eq
,ne
, иcmp
в соответствующих случаях для сравнения строк:источник
index
чтобы увидеть, является ли строка подстрокой другой.!=
иne
не то же самое, потому что!=
иne
определены как разные. Насколько это сложно ?! Будучи оператором сравнения!=
чисел , оба его операнда преобразуются в числаperl -E 'say "equal" if not "a" != "b"'
.cmp
сравнитьeq
Равноne
Не равноlt
Меньше, чемle
Меньше или равноgt
Лучше чемge
Больше или равноСмотрите
perldoc perlop
для получения дополнительной информации.(Я немного упрощаю это, так как все, но
cmp
возвращаю значение, которое является одновременно пустой строкой и численно нулевым значением вместо0
, и значение, которое является одновременно строкой'1'
и числовым значением1
. Это те же значения, которые вы будете всегда получайте логические операторы в Perl. На самом деле вы должны использовать только возвращаемые значения для логических или числовых операций, и в этом случае разница на самом деле не имеет значения.)источник
eq
,gt
иlt
т. Д. Не верны ... Они возвращают истину или ложь.cmp
Возвращает только конкретные числовые значения.leg
вместоcmp
них он используется для общих сравнений.В дополнение к полному списку операторов сравнения строк в Sinan Ünür, Perl 5.10 добавляет оператор интеллектуального сопоставления.
Оператор умного сопоставления сравнивает два элемента в зависимости от их типа. См. Таблицу ниже для поведения 5.10 (я считаю, что это поведение немного меняется в 5.10.1):
perldoc perlsyn
«Умное сопоставление в деталях» :источник
В Perl есть отдельные операторы сравнения строк и числового сравнения, чтобы помочь с неправильной типизацией в языке. Вы должны прочитать perlop для всех различных операторов.
источник
Очевидный подтекст этого вопроса:
Perl не имеет определенных типов данных для текста против чисел. Они оба представлены типом «скаляр» . Другими словами, строки - это числа, если вы используете их как таковые .
Поскольку текст и числа не различаются по языку, мы не можем просто перегрузить
==
оператор, чтобы сделать правильные вещи в обоих случаях. Следовательно, Perl позволяетeq
сравнивать значения как текст:Коротко:
==
или!=
, чтобы сравнить два операнда как числаeq
илиne
, чтобы сравнить два операнда как текстСуществует много других функций и операторов, которые можно использовать для сравнения скалярных значений, но знание различия между этими двумя формами является важным первым шагом.
источник
И если вы хотите извлечь различия между двумя строками, вы можете использовать String :: Diff .
источник