加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

这个Perl语法构造是什么?

发布时间:2020-12-15 23:34:57 所属栏目:大数据 来源:网络整理
导读:我在之前的 Sorting file names by numeric value帖子中有一个跟进问题. 解决方案是这段代码: opendir(XMLDIR,$xmldirname);my @files = sort {substr($a,index($a,'.')) = substr($b,index($b,'.'))} readdir(XMLDIR); 我真的不明白readdir前面的整个{…}
我在之前的 Sorting file names by numeric value帖子中有一个跟进问题.

解决方案是这段代码:

opendir(XMLDIR,$xmldirname);
my @files = sort {substr($a,index($a,'.')) <=> substr($b,index($b,'.'))} readdir(XMLDIR);

我真的不明白readdir前面的整个{…}是做什么的,或者更确切地说,它是如何做它正在做的事情.当然,我可以看到两个值相互比较.但是整个事情是什么样的语法结构? $a和$b来自哪里?我可以在Perl书中看到哪些标题?这是一个特殊的东西,只适用于sort {}还是有其他方法可以使用这个构造?

解决方法

采用的语法是 sort

sort BLOCK LIST

LIST表示的表达式是返回要排序的值列表.在您的情况下,这是readdir(XMLDIR).它返回目录中文件名的列表.

BLOCK是有趣的部分.它表示curlies中的代码,由排序算法调用以与要排序的元素进行比较.要比较的元素以$a和$b的形式提供,代码应评估为以下之一:

>如果$a应该放在$b之前,则为负值,
>如果相对于$b应该放置$a无关紧要,则为零,或者
>如果$a应该放在$b之后,则为正值.

substr($a,’.’))在第一个之前提取文件名的一部分.在这种情况下,它提取文件名中的数字.

然后,如上所述,从两个文件名中提取的数字通过< =>,重新调整-1,0或1进行数值比较.

请注意,您的代码会发出警告,因为它没有考虑readdir将返回的内容.并且…我通过在原始问题中添加answer来解决这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读