perl – 使用另一个包中的排序子例程
发布时间:2020-12-15 21:54:20 所属栏目:大数据 来源:网络整理
导读:我有一个脚本和一个像这样的包: # file: sortscript.pluse strict;use warnings;use SortPackage;my @arrays = ([1,"array1"],[10,"array3"],[4,"array2"]);print "Using sort outside packagen";foreach (sort SortPackage::simplesort @arrays){ print $
我有一个脚本和一个像这样的包:
# file: sortscript.pl use strict; use warnings; use SortPackage; my @arrays = ([1,"array1"],[10,"array3"],[4,"array2"]); print "Using sort outside packagen"; foreach (sort SortPackage::simplesort @arrays){ print $_->[1],"n"; } print "nUsing sort in same packagen"; SortPackage::sort_from_same_package(@arrays); – # file: SortPackage.pm use strict; use warnings; package SortPackage; sub simplesort{ return ($a->[0] <=> $b->[0]); } sub sort_from_same_package{ my @arrs = @_; foreach (sort simplesort @arrs){ print $_->[1],"n"; } } 1; 运行脚本会生成输出: $perl sortscript.pl Using sort outside package Use of uninitialized value in numeric comparison (<=>) at SortPackage.pm line 15. Use of uninitialized value in numeric comparison (<=>) at SortPackage.pm line 15. Use of uninitialized value in numeric comparison (<=>) at SortPackage.pm line 15. Use of uninitialized value in numeric comparison (<=>) at SortPackage.pm line 15. Use of uninitialized value in numeric comparison (<=>) at SortPackage.pm line 15. Use of uninitialized value in numeric comparison (<=>) at SortPackage.pm line 15. array1 array3 array2 Using sort in same package array1 array2 array3 为什么我无法正确使用子例程在其他包中进行排序? 解决方法
如前所述,$a和$b是包全局变量,因此另一种解决方案是将调用站点的全局变量暂时别名为SortPackage包中的全局变量:
{ local (*a,*b) = (*SortPackage::a,*SortPackage::b); foreach (sort SortPackage::simplesort @arrays){ print $_->[1],"n"; } } 但当然,这非常难看.我只是让SortPackage导出一个完整的排序例程,而不仅仅是一个比较器: package SortPackage; use strict; sub _sort_by_first_element_comparator { return $a->[0] <=> $b->[0]; } sub sort_by_first_element { return sort _sort_by_first_element_comparator @_; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 【漏洞】挖掘
- perl – 使用“under”而不使用Mojolicious :: Lite的Mojol
- NOIP2003 第二题 侦探推理 ——论世界上最逗比的出(da)题(s
- Delphi:Socket.ReadBytes(); vs IOHandler.ReadBytes()
- 03-03 创建和编辑AutoCAD实体(三) 使用选择集(1)
- file-io – Groovy:无法将类’java.lang.Boolean’的对象’
- delphi – TActionMainMenuBar菜单中的RadioItems
- [函数] Delphi FMX Windows 取得下载 Downloads 目录
- 云月VB代码格式化插件 1.0
- Golang 限速器