Jak porównać dwa ciągi w Perlu?
Uczę się Perla, miałem to podstawowe pytanie, sprawdziłem je tutaj w StackOverflow i nie znalazłem dobrej odpowiedzi, więc pomyślałem, że zapytam.
Jak porównać dwa ciągi w Perlu?
Uczę się Perla, miałem to podstawowe pytanie, sprawdziłem je tutaj w StackOverflow i nie znalazłem dobrej odpowiedzi, więc pomyślałem, że zapytam.
Odpowiedzi:
Zobacz perldoc perlop . Zastosowanie
lt
,gt
,eq
,ne
, icmp
odpowiednio dla porównań łańcuchowych:źródło
index
aby sprawdzić, czy ciąg jest podłańcuchem innego.!=
ine
nie są takie same, ponieważ!=
ine
są zdefiniowane jako różne. Jak trudne to jest ?! Będąc liczbowym operatorem porównania,!=
konwertuje oba operandy na liczbyperl -E 'say "equal" if not "a" != "b"'
.cmp
Porównaćeq
Równyne
Nie równelt
Mniej niżle
Mniejszy lub równygt
Lepszy niżge
Większe bądź równeZobacz,
perldoc perlop
aby uzyskać więcej informacji.(Upraszczam to trochę, ponieważ wszystkie
cmp
zwracają wartość, która jest zarówno pustym ciągiem, jak i wartością numeryczną zero zamiast0
, oraz wartością, która jest zarówno ciągiem, jak'1'
i wartością liczbową1
. Są to te same wartości, które będziesz zawsze otrzymuj z operatorów logicznych w Perlu. Zwracane wartości powinny być używane tylko dla operacji logicznych lub numerycznych, w takim przypadku różnica nie ma znaczenia).źródło
eq
,gt
,lt
etc nie są poprawne ... Wracają prawdziwe lub fałszywe.cmp
Zwraca tylko określone wartości liczbowe.leg
zamiastcmp
nich jest używany do porównań ogólnych.Oprócz obszernej listy operatorów porównania ciągów przez Sinana Ünür, Perl 5.10 dodaje operator inteligentnego dopasowania.
Operator inteligentnego dopasowania porównuje dwa elementy na podstawie ich typu. Zobacz poniższy wykres dla zachowania 5.10 (uważam, że to zachowanie zmienia się nieznacznie w 5.10.1):
perldoc perlsyn
„Inteligentne dopasowanie szczegółów” :źródło
Perl ma oddzielne operatory porównania ciągów i liczb, które pomagają w luźnym pisaniu w języku. Powinieneś przeczytać perlop dla wszystkich różnych operatorów.
źródło
Oczywistym podtekstem tego pytania jest:
Perl nie ma odrębnych typów danych dla tekstu i liczb. Oba są reprezentowane przez typ „skalarny” . Innymi słowy, łańcuchy są liczbami, jeśli używasz ich jako takich .
Ponieważ tekst i liczby nie są rozróżniane na podstawie języka, nie możemy po prostu przeciążać
==
operatora, aby zrobił właściwą rzecz w obu przypadkach. Dlatego Perl umożliwiaeq
porównywanie wartości jako tekstu:W skrócie:
==
lub!=
, aby porównać dwa operandy jako liczbyeq
lubne
, aby porównać dwa operandy jako tekstIstnieje wiele innych funkcji i operatorów, których można użyć do porównania wartości skalarnych, ale znajomość różnicy między tymi dwoma formami jest ważnym pierwszym krokiem.
źródło
A jeśli chcesz wyodrębnić różnice między dwoma ciągami, możesz użyć String :: Diff .
źródło