2013-08-07 12 views
5

Na zaakceptowanej odpowiedzi na String compare in Perl with "eq" vs "=="Perl proste porównanie == vs eq

mówi, że First, eq is for comparing strings; == is for comparing numbers.

„== robi porównanie numeryczne. Konwertuje oba argumenty do numeru, a następnie porównuje je”
„eq robi porównanie wyrażenie: dwa argumenty muszą dopasować leksykalnie (wielkość liter ma znaczenie)”

można tylko używać eq dla porównywania ciągów ale
zarówno eq I == pracuje dla porównywanie liczb

liczb są podzestawami ciągów znaków, więc nie rozumiem, dlaczego kiedykolwiek używałeś ==

Czy istnieje powód, dla którego chcesz użyć == do porównywania wartości liczbowych zamiast używania eq dla wszystkich?

Odpowiedz

11

Here is an example of why you might want ==:

$a = "3.0"; 
print "eq" if $a eq "3"; # this will not print 
print "==" if $a == 3; # this will print 

3,0 jest liczbowo równe 3, więc jeśli chcesz, żeby być równa, należy ==. Jeśli chcesz porównywać ciągi znaków, wówczas "3.0" nie jest równe "3", więc w tym przypadku użyjesz eq. Wreszcie, == jest tańszą operacją niż eq.

+0

ah tak. ma sens. nie myślałem o tym konkretnym przypadku. – ealeon

4

Porównywarki ciągów są po prostu różne, szczególnie w przypadku liczb.

@s_num=sort {$a <=> $b} (20,100,3); # uses explicit numeric comparison 
print "@s_num\n";      # prints 3 20 100, like we expect 

@s_char=sort (20,100,3);    # uses implicit string comparison 
print "@s_char\n";     # prints 100 20 3, not so good. 

-Tom Williams

Powiązane problemy