¿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
, ycmp
según sea apropiado para las comparaciones de cadenas:fuente
index
para ver si una cadena es una subcadena de otra.!=
yne
no son lo mismo, porque!=
yne
se 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"'
.cmp
Comparareq
Igual ane
No igual alt
Menos quele
Menos que o igual agt
Mas grande quege
Mayor qué o igual aVer
perldoc perlop
para más información.(Estoy simplificando esto un poco, pero
cmp
devuelvo 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
,lt
etc, no son correctas ... Vuelven verdadero o falso. Solocmp
devuelve valores numéricos específicos.leg
lugar de loscmp
que 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 proporcionaeq
comparar valores como texto:En breve:
==
o!=
, para comparar dos operandos como númeroseq
one
, 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