W dowolnej metodzie porównywania. Na przykład możesz mieć skomplikowany obiekt, ale nadal ma zdefiniowaną "kolejność", więc możesz zdefiniować dla niego funkcję porównania (której nie musisz używać jako metody sortowania, ale nie jest to przydatne):
package Foo;
# ... other stuff...
# Note: this is a class function, not a method
sub cmp
{
my $object1 = shift;
my $object2 = shift;
my $compare1 = sprintf("%04d%04d%04d", $object1->{field1}, $object1->{field2}, $object1->{field3});
my $compare2 = sprintf("%04d%04d%04d", $object2->{field1}, $object2->{field2}, $object2->{field3});
return $compare1 <=> $compare2;
}
Oczywiście jest to całkowicie wymyślny przykład. Jednak w kodzie źródłowym mojej firmy znalazłem prawie dokładnie powyższe, dla porównania obiektów używanych do przechowywania informacji o dacie i czasie.
Jeden inne wykorzystanie mogę pomyśleć, to do analizy statystycznej - jeśli wartość jest wielokrotnie uruchamiać na liście wartości, można stwierdzić, czy wartość jest wyższa lub niższa niż ustawiona w arytmetyczna mediana
use List::Util qw(sum);
# $result will be
# -1 if value is lower than the median of @setOfValues,
# 1 if value is higher than the median of @setOfValues,
# 0 if value is equal to the median
my $result = sum(map { $value <=> $_ } @setOfValues);
Oto jeszcze jeden, od wikipedia: "Jeśli nie można porównać dwóch argumentów (np. Jeden z nich to NaN), operator zwraca undef." tzn. możesz określić, czy dwie liczby są jednocześnie liczbami, ale osobiście wybrałbym mniej tajemniczy Scalar::Util :: szukany_numer.
@ether: tylko znacznik "operator"? Myślałem, że lubisz tworzyć nowe tagi operatora! –