¿Cómo comparo dos cadenas en Perl?
Estoy aprendiendo Perl, tenía esta pregunta básica, la busqué aquí en StackOverflow y no encontré una buena respuesta, así que pensé en preguntar.
¿Cómo comparo dos cadenas en Perl?
Estoy aprendiendo Perl, tenía esta pregunta básica, la busqué aquí en StackOverflow y no encontré una buena respuesta, así que pensé en preguntar.
Respuestas:
Ver perldoc perlop . Uso
lt,gt,eq,ne, ycmpsegún sea apropiado para las comparaciones de cadenas:fuente
indexpara ver si una cadena es una subcadena de otra.!=yneno son lo mismo, porque!=ynese definen como diferentes. ¿Qué tan difícil es eso? Al ser un operador de comparación numérico,!=convierte sus dos operandos en númerosperl -E 'say "equal" if not "a" != "b"'.cmpComparareqIgual aneNo igual altMenos queleMenos que o igual agtMas grande quegeMayor qué o igual aVer
perldoc perloppara más información.(Estoy simplificando esto un poco, pero
cmpdevuelvo un valor que es una cadena vacía y un valor numérico cero en lugar de0, y un valor que es tanto la cadena'1'como el valor numérico1. Estos son los mismos valores que obtendrás siempre obtenga de operadores booleanos en Perl. Realmente solo debería usar los valores de retorno para operaciones booleanas o numéricas, en cuyo caso la diferencia realmente no importa).fuente
eq,gt,ltetc, no son correctas ... Vuelven verdadero o falso. Solocmpdevuelve valores numéricos específicos.leglugar de loscmpque se usan para comparaciones genéricas.Además de la lista completa de operadores de comparación de cadenas de Sinan Ünür, Perl 5.10 agrega el operador de coincidencia inteligente.
El operador de comparación inteligente compara dos elementos según su tipo. Consulte el cuadro a continuación para ver el comportamiento 5.10 (creo que este comportamiento está cambiando ligeramente en 5.10.1):
perldoc perlsyn"Emparejamiento inteligente en detalle" :fuente
Perl tiene operadores separados de comparación de cadenas y comparación numérica para ayudar con la escritura suelta en el idioma. Debería leer perlop para todos los diferentes operadores.
fuente
El subtexto obvio de esta pregunta es:
Perl no tiene tipos de datos distintos para texto versus números. Ambos están representados por el tipo "escalar" . Dicho de otra manera, las cadenas son números si las usas como tales .
Dado que el texto y los números no están diferenciados por el idioma, no podemos simplemente sobrecargar al
==operador para que haga lo correcto en ambos casos. Por lo tanto, Perl proporcionaeqcomparar valores como texto:En breve:
==o!=, para comparar dos operandos como númeroseqone, para comparar dos operandos como textoHay muchas otras funciones y operadores que se pueden usar para comparar valores escalares, pero conocer la distinción entre estas dos formas es un primer paso importante.
fuente
Y si desea extraer las diferencias entre las dos cadenas, puede usar String :: Diff .
fuente