Como eu comparo duas strings no Perl?
Estou aprendendo Perl, tive essa pergunta básica pesquisada aqui no StackOverflow e não encontrei uma boa resposta, então pensei em perguntar.
Como eu comparo duas strings no Perl?
Estou aprendendo Perl, tive essa pergunta básica pesquisada aqui no StackOverflow e não encontrei uma boa resposta, então pensei em perguntar.
Respostas:
Veja perldoc perlop . Use
lt
,gt
,eq
,ne
, ecmp
conforme apropriado para comparações de strings:fonte
index
para ver se uma string é uma substring de outra.!=
ene
não são o mesmo, porque!=
ene
são definidos para ser diferente. Quão difícil é isso ?! Sendo um operador de comparação numérica,!=
converte os dois operandos em númerosperl -E 'say "equal" if not "a" != "b"'
.cmp
Comparareq
Igual ane
Diferente delt
Menor quele
Menos que ou igual agt
Maior quege
Melhor que ou igual aVeja
perldoc perlop
para mais informações.(Estou simplificando isso um pouco, pois todos
cmp
retornam um valor que é uma sequência vazia e um valor numericamente zero em vez de0
e um valor que é a sequência'1'
e o valor numérico1
. Esses são os mesmos valores que você irá sempre obtenha operadores booleanos em Perl. Você realmente deve usar apenas os valores de retorno para operações numéricas ou booleanas; nesse caso, a diferença não importa.)fonte
eq
,gt
,lt
etc não estão corretos ... Eles retornam verdadeiro ou falso.cmp
Retorna apenas valores numéricos específicos.leg
vez disso,cmp
é usado para comparações genéricas.Além da lista abrangente da Sinan Ünür de operadores de comparação de strings, o Perl 5.10 adiciona o operador de correspondência inteligente.
O operador de correspondência inteligente compara dois itens com base em seu tipo. Veja o gráfico abaixo para o comportamento 5.10 (acredito que esse comportamento esteja mudando um pouco no 5.10.1):
perldoc perlsyn
"Correspondência inteligente em detalhes" :fonte
O Perl possui operadores separados de comparação de caracteres e de comparação numérica para ajudar na digitação solta no idioma. Você deve ler perlop para todos os diferentes operadores.
fonte
O subtexto óbvio desta pergunta é:
O Perl não possui tipos de dados distintos para texto versus números. Ambos são representados pelo tipo "escalar" . Em outras palavras, cadeias são números se você as usar como tal .
Como texto e números não são diferenciados pelo idioma, não podemos simplesmente sobrecarregar o
==
operador para fazer a coisa certa nos dois casos. Portanto, o Perl forneceeq
para comparar valores como texto:Em resumo:
==
ou!=
, para comparar dois operandos como númeroseq
oune
para comparar dois operandos como textoExistem muitas outras funções e operadores que podem ser usados para comparar valores escalares, mas conhecer a distinção entre essas duas formas é um primeiro passo importante.
fonte
E se você deseja extrair as diferenças entre as duas strings, pode usar String :: Diff .
fonte