对于那些不了解Perl的人来说autobox
,它是一个模块,它为您提供内置基元的方法,甚至可以覆盖它们.
# primitives
'a string'->toupper();
10->to(1); # returns [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
# Arrays, array refs
[qw(A B C D E)]->for_each( sub { ... } );
@array->length()
# Hashes, hash refs
{ key => 'value', key2 => 'value2' }->values()
%hash->keys()
# Even specify your own base class...
use autobox SCALAR => 'Foo';
Run Code Online (Sandbox Code Playgroud)
总体而言,内置类型的方法更像是对象,简化了一些任务,使其他任务变得更加明显.
然而...
该autobox
文档说有性能损失,一些比简单地调用对象的方法,比标准的语法更加多. 然后,有一些关于它在eval
s中使用的警告(特别是字符串evals)在某些情况下可能会导致问题. 它看起来似乎没有标准的许多Perl发行版.
使用autobox真的值得吗?
马课程!然而,从左到右阅读链条往往更容易理解恕我直言:
say sort grep /\w/, map { chr } 0 .. 255;
Run Code Online (Sandbox Code Playgroud)
虽然较短的下方确实更好地流动:
say [ 0..255 ]->map( sub { chr } )->grep( sub { m/\w/ } )->sort->join('');
Run Code Online (Sandbox Code Playgroud)
/ I3az /
我使用autobox:
$c->login($c->req->{params}->hslice([qw/username password/])
Run Code Online (Sandbox Code Playgroud)
最终采用任意哈希并将其减少为{ username => <whatever>, password => <whatever> }
.通常很多代码.Moose :: Autobox的一个符号.