Должен ли я использовать 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.