Должен ли я использовать autobox в Perl?
Для тех, кто не знает 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';
В целом методы, основанные на встроенных типах, больше напоминают объекты, упрощают некоторые задачи и делают другие более очевидными.
Однако...
autobox
docs говорят, что штрафы за производительность, несколько больше, чем просто вызов метода на объект, намного больше, чем стандартный синтаксис. И тут есть несколько предостережений о его использовании в eval
(в частности, об ошибках строк), которые могут в некоторых случаях вызвать проблемы. также похоже, что он не соответствует стандарту со многими дистрибутивами Perl.
Действительно ли стоит использовать автобокс?
Ответы
Ответ 1
Хорошо, вы когда-нибудь хотели, чтобы появился модуль, который сделал autobox, прежде чем вы узнали о autobox?
Если ответ "да", вы должны его использовать. Вы также можете внести свой вклад в его разработку, подав отчеты об ошибках и исправив их, если получите эту возможность.
К сожалению, я попадаю в лагерь "круто, но...", поэтому я не могу предложить вам больше понимания.
Ответ 2
Лошади для курсов! Однако прочтение цепочки слева направо часто легче перетащить ИМХО:
say sort grep /\w/, map { chr } 0 .. 255;
В то время как более короткое ниже делает поток более приятным:
say [ 0..255 ]->map( sub { chr } )->grep( sub { m/\w/ } )->sort->join('');
ref: фрагмент из комментариев Hacker News
/I3az/
Ответ 3
Я использую autobox для:
$c->login($c->req->{params}->hslice([qw/username password/])
В результате получается произвольный хэш и сводится к { username => <whatever>, password => <whatever> }
. Обычно много кода. Один символ с Moose:: Autobox.