Okay so I came across a code which looks like
@documents_names = sort {
!!$deleted_documents_names{$a} == !!$deleted_documents_names{$b}
? uc($a) cmp uc($b)
: !!$deleted_documents_names{$a}
cmp !!$deleted_documents_names{$b}
} @documents_names;
It’s the first time I’m seeing the use of double negation. What’s the use of it? When would a person use it?
It converts non-boolean types to boolean (
dualvar(0,"")or1).It is a shortcut way of doing this, instead of trying to cast it explicitly (which may take more characters). The
!operator negates the truthness of its argument. Hence, two of them are used.Many object types are “truthy”, and others are “falsey”.
0,undef,"","0"and some overloaded objects.1,"asdf", and all other values.