Quelle est la différence entre 'eq' et '=~' en Perl?
Quelle est la différence entre ces deux opérateurs? Plus précisément, quelle est la différence dans $a
conduira à la différence de comportement entre les deux?
$a =~ /^pattern$/
$a eq 'pattern'
Merci pour les réponses!
OriginalL'auteur user150283 | 2009-09-17
Vous devez vous connecter pour publier un commentaire.
"\n" 🙂
Peut-être que vous avez voulu dire /^le motif\z/.
pas d'espaces en général; en particulier d'un seul saut de ligne ("\n\n" ou "\t" ne correspondent pas). $ (sans /m) correspond à la fin de la chaîne ou juste avant un saut de ligne à la fin de la chaîne.
OriginalL'auteur ysth
eq
est pour le test de la chaîne de l'égalité,==
est la même chose, mais pour l'égalité numérique.La
=~
opérateur est l'application d'une expression régulière à un scalaire.Pour les détails techniques de chaque opérateur de Perl et de ce qu'ils sont, voir la perldoc perlop page de manuel.
perldoc perlop
, vous pouvez consulterperlopref
- un travail en cours - sur Github: github.com/cowens/perloprefOriginalL'auteur friedo
Comme d'autres l'ont noté,
($a =~ /^pattern$/)
utilise le moteur d'expression régulière pour évaluer si les chaînes sont identiques, alors que($a eq 'pattern')
est la plaine de la chaîne de test d'égalité.Si vous avez vraiment envie de savoir si les deux chaînes sont identiques, ce dernier est préféré pour des raisons de:
\Q
et\E
. Avec une seule chaîne de caractères entre guillemets, le seul personnage que vous devez escape est un guillemet simple. (Vous avez également à barres obliques inverses, si ils sont suivis par une autre barre oblique inverse ou le délimiteur de chaîne.)D'autre part, l'expression régulière est beaucoup plus souple si vous avez besoin de faire quelque chose autres qu'une chaîne simple test d'égalité. Voir perldoc perlre pour en savoir plus sur les expressions régulières.
EDIT: Comme la plupart des tout le monde avant de ysth, j'ai manqué à l'évidence fonctionnelle la différence entre eux et est allé tout droit pour plus abstrait différences. J'ai clarifié la question, mais je vais laisser la réponse en tant que (je l'espère) de référence utile.
OriginalL'auteur Adam Bellaire
eq
-- Tests d'égalité des chaînes.=~
-- Lie une expression scalaire à une mise en correspondance du modèle.Voir ici pour plus de descriptions détaillées de tous les opérateurs.
OriginalL'auteur Donut
=~
est la liaison de l'opérateur. Il est utilisé pour lier une valeur à une mise en correspondance du modèle (m//
), une substitution (s///
), ou une translittération (tr//
ouy//
).eq
est la chaîne de l'opérateur d'égalité; il compare deux valeurs pour déterminer si oui ou non ils sont égaux lorsqu'ils sont considérés comme des chaînes de caractères. Il y a un peer==
opérateur qui fait la même chose en ne considérant que les valeurs comme des nombres. (En Perl, les chaînes et les nombres sont souvent interchangeables avec les conversions passe automatiquement en fonction de la façon dont les valeurs sont utilisées. De ce fait, lorsque vous voulez comparer deux valeurs, vous devez spécifier le type de comparaison à effectuer.)En général,
$var =~ m/.../
détermine si oui ou non la valeur de$var
correspond à un modèle, pas de savoir si elle est égale à une valeur particulière. Toutefois, dans ce cas, le modèle est ancré à ses deux extrémités et ne contient rien, mais ces caractères, il est donc équivalent à une comparaison de chaînes de caractères. Il est préférable d'utilisereq
ici parce que c'est plus clair et plus rapide.OriginalL'auteur Michael Carman