Comment comparer deux chaînes en Perl?
J'apprends Perl, j'avais cette question de base recherchée ici sur StackOverflow et je n'ai trouvé aucune bonne réponse, alors j'ai pensé que je demanderais.
Comment comparer deux chaînes en Perl?
J'apprends Perl, j'avais cette question de base recherchée ici sur StackOverflow et je n'ai trouvé aucune bonne réponse, alors j'ai pensé que je demanderais.
Réponses:
Voir perldoc perlop . Utilisez
lt
,gt
,eq
,ne
etcmp
le cas échéant pour les comparaisons de chaînes:la source
index
pour voir si une chaîne est une sous-chaîne d'une autre.!=
etne
ne sont pas les mêmes, car!=
etne
sont définis comme étant différents. Est-ce difficile?! Étant un opérateur de comparaison numérique,!=
convertit ses deux opérandes en nombresperl -E 'say "equal" if not "a" != "b"'
.cmp
Comparereq
Égal àne
Pas égal àlt
Moins quele
Inférieur ou égal àgt
Plus grand quege
Plus grand ou égal àVoir
perldoc perlop
pour plus d'informations.(Je simplifie un peu cela car tout sauf
cmp
retourne une valeur qui est à la fois une chaîne vide et une valeur numérique zéro au lieu de0
, et une valeur qui est à la fois la chaîne'1'
et la valeur numérique1
. Ce sont les mêmes valeurs que vous toujours obtenir des opérateurs booléens en Perl. Vous ne devriez vraiment utiliser les valeurs de retour que pour les opérations booléennes ou numériques, auquel cas la différence n'a pas vraiment d'importance.)la source
eq
,gt
,lt
etc ne sont pas correctes ... Ils renvoient vrai ou faux. Renvoie uniquementcmp
des valeurs numériques spécifiques.leg
placecmp
ce qui est utilisé pour les comparaisons génériques à la place.En plus de la liste complète des opérateurs de comparaison de chaînes de Sinan Ünür, Perl 5.10 ajoute l'opérateur de correspondance intelligente.
L'opérateur de correspondance intelligente compare deux éléments en fonction de leur type. Voir le tableau ci-dessous pour le comportement 5.10 (je pense que ce comportement change légèrement dans 5.10.1):
perldoc perlsyn
"Correspondance intelligente en détail" :la source
Perl a des opérateurs de comparaison de chaînes et de comparaison numériques séparés pour faciliter la saisie lâche dans le langage. Vous devriez lire perlop pour tous les différents opérateurs.
la source
Le sous-texte évident de cette question est:
Perl n'a pas de types de données distincts pour le texte et les nombres. Ils sont tous deux représentés par le type "scalaire" . En d'autres termes, les chaînes sont des nombres si vous les utilisez comme tels .
Puisque le texte et les nombres ne sont pas différenciés par la langue, nous ne pouvons pas simplement surcharger l'
==
opérateur pour qu'il fasse ce qu'il faut dans les deux cas. Par conséquent, Perl proposeeq
de comparer les valeurs sous forme de texte:En bref:
==
ou!=
, pour comparer deux opérandes sous forme de nombreseq
oune
, pour comparer deux opérandes sous forme de texteIl existe de nombreuses autres fonctions et opérateurs pouvant être utilisés pour comparer des valeurs scalaires, mais connaître la distinction entre ces deux formes est une première étape importante.
la source
Et si vous souhaitez extraire les différences entre les deux chaînes, vous pouvez utiliser String :: Diff .
la source