. Örneğin karmaşık bir nesneye sahip olabilirsiniz ancak yine de tanımlanmış bir "sipariş" e sahip olabilirsiniz, bu yüzden bunun için bir karşılaştırma işlevi tanımlayabilirsiniz (, bir sıralama yönteminde kullanmak için kullanmanız gerekir),
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;
}
Bu, tamamen mahrum edilmiş bir örnektir. Ancak, şirketimdeki kaynak kodunda, tarih ve saat bilgilerini tutmak için kullanılan nesneleri karşılaştırmak için neredeyse tam olarak yukarıdakileri buldum.
Ben istatistiksel analiz için aklınıza gelebilecek bir diğer kullanım - değeri kümesinin aritmetik orta değerinden daha yüksek veya daha düşük olması durumunda bir değer defalarca değerler listesine göre çalıştırılırsa, görebiliyorsun:
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);
wikipedia'dan bir tane daha: "İki argüman karşılaştırılamazsa (örneğin, biri NaN'dir), operatör undef değerini döndürür." Yani, daha az şifreli olan Scalar::Util :: looks_like_number için kişisel olarak ben gideceksem, iki sayının aynı anda bir sayı olup olmadığını belirleyebilirsiniz.
@ether: Yalnızca "operatör" etiketi? Yeni operatör etiketleri oluşturmayı sevdiğini düşündüm! –