Cha*_*hak 31 perl boolean operators
好的,所以我遇到了一个看起来像的代码
@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;
这是我第一次看到使用双重否定.有什么用?一个人什么时候使用它?
ron*_*chn 44
它将非布尔类型转换为布尔(dualvar(0,"")或1).
这是执行此操作的快捷方式,而不是尝试显式转换(可能需要更多字符).该!运营商否定其参数的truthness.因此,使用其中两个.
许多对象类型是"真实的",而其他对象类型是"假的".
0,undef,"","0"和一些超载的对象.1,"asdf"和所有其他值.Zai*_*aid 10
对于一个sort街区来说,这很有趣!
它基本上是一个两级排序:
所以可以将其重写为(未经测试):
@documents = sort {  exists $deleted_documents_names{$a} # same effect as '!!'
                       <=> 
                     exists $deleted_documents_names{$b}
                  ||
                     uc( $a ) cmp uc( $b )
                  }
             @documents;
| 归档时间: | 
 | 
| 查看次数: | 1277 次 | 
| 最近记录: |