这在Perl v5.22中得到修复.
Perl v5.18的词法子程序是否有排序?我今天终于有了一个用途,我有一个复杂的排序例程,它依赖于数据结构中的当前位置来查看更深的部分.
这是一个小程序:
use v5.18;
use feature qw(lexical_subs);
no warnings qw(experimental::lexical_subs);
my sub by_numbers { $a <=> $b }
my @sorted = sort by_numbers qw( 4 8 2 3 0 5 7 6 1 9 );
say "sorted: @sorted";
Run Code Online (Sandbox Code Playgroud)
显然sort对此一无所知,因为它仍然在寻找%main::命名子例程:
% perl5.18.2 test.pl
Undefined sort subroutine "main::by_numbers" called at test.pl line 7.
% perl5.20.1 test.pl
Undefined sort subroutine "main::by_numbers" called at test.pl line 7.
Run Code Online (Sandbox Code Playgroud)
我有点失望,因为这是rjbs 在perl 5中的词法子例程中使用的第一个用例.
这部分并不重要,因为我查看了当前版本的测试而不是v5.18版本. …
当我尝试在Windows 7上将Crypt :: TEA模块安装到perl 5.18时,显示错误:
TEA.xs:在函数'XS_Crypt__TEA_crypt'中:TEA.xs:58:9:错误:无效使用void表达式
我对Perl并不熟悉,但过去两天我一直在搜索文档和其他来源,但没有成功.在文档中,它写成:
Perl v5.18包含对多个哈希函数的支持,并且更改了默认值(to
ONE_AT_A_TIME_HARD),您可以通过在编译时定义符号来选择不同的算法.有关当前列表,请参阅INSTALL文档.请注意,从Perl v5.18开始,我们只能推荐使用默认值或SIPHASH.众所周知,所有其他人都存在安全问题,仅用于研究目的.
事情是既不在INSTALL文档中也不在其他来源/站点等中.我可以找到如何定义此符号.
我想要做的是更改默认的ONE_AT_A_TIME_HARD哈希函数,ONE_AT_A_TIME_OLD以便我可以模拟旧的Perl 5.16行为.