我对前面的文章按数字值排序文件名有一个后续问题。
解决方案是这段代码:
opendir(XMLDIR,$xmldirname);
my @files = sort {substr($a, 0, index($a, '.')) <=> substr($b, 0, index($b, '.'))} readdir(XMLDIR);
我真的不了解readdir前面的整个{...}到底在做什么,或者更确切地说,它是如何做的。当然,我可以看到两个值相互比较。但是整件事是什么样的语法构造?$ a和$ b来自哪里?我可以在Perl书中的哪个标题下查找?这是仅与sort {}一起使用的特殊功能吗?还是还有其他使用此构造的方法?
采用的语法sort
是
sort BLOCK LIST
以表示的表达式LIST
是返回要排序的值列表。这是readdir(XMLDIR)
您的情况。它返回目录中文件名的列表。
这BLOCK
是有趣的部分。它表示杂乱无章的代码,由排序算法调用以与要排序的元素进行比较。比较元件被设置为$a
和$b
,以及将码应评估为以下之一:
$a
放在之前$b
,$a
相对于$b
,或放在何处无关紧要为零$a
应在后面加上一个正值$b
。substr($a, 0, index($a, '.'))
提取文件名中位于first之前的部分.
。在这种情况下,将提取文件名中的数字。
然后,从两个文件名中提取的数由数字比较<=>
,重新调谐-1
,0
或+1
如上文所述。
请注意,您的代码会发出警告,因为它不考虑readdir
会返回.
和的代码..
。我通过为您的原始问题添加答案来解决此问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句