Para aquellos que desconocen el autobox
de Perl, es un módulo que le proporciona métodos sobre primitivas incorporadas, y le permite incluso anularlas.¿Debo usar autobox en Perl?
# 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';
Se global hace que los métodos de construcción de tipos sentirse más como objetos, lo que simplifica algunas tareas y hacer que otros parecen más evidentes.
Sin embargo ...
los autobox
documentos dicen que hay performance penalties, algunos más que simplemente llamando al método en el objeto, mucho más que la sintaxis estándar. And then, there's a few caveats about its use in eval
s (specifically, string evals) that might, in some circumstances, cause issues. También parece que no viene de serie con muchas distribuciones de Perl.
¿Realmente vale la pena usar autobox?
¡Eso es genial! – Geo
Es genial, pero una parte de mí no puede dejar de pensar en "Si quisiera usar Ruby ..." –
Entiendo por qué Java y C# hacen autoboxing: Las colecciones solo operan en objetos utilizando métodos específicos heredados de la base Object clase (posiblemente anulada), por lo que los tipos primitivos se agrupan en sus tipos de objetos antes de rellenarlos en una colección. Perl no tiene nada como esto, entonces ¿por qué primitivas de caja en objetos? – Powerlord