Desreferencia postfija en Perl
Dos escrituras de la misma desreferencia: @$ref con signo inicial y el postfijo $ref->@*.
use strict;
use warnings;
my $nums = [3, 1, 4, 1, 5];
my $entry = { name => "ada", langs => ["perl", "c"] };
my @classic = @$nums; # sigil-first deref
my @postfix = $nums->@*; # postfix reads left to right
print "classic: @classic\n";
print "postfix: @postfix\n";
print "langs: ", join(", ", $entry->{langs}->@*), "\n";
print "keys: ", join(" ", sort keys $entry->%*), "\n";
print "count: ", scalar $nums->@*, "\n";
Cómo funciona
@$numsy$nums->@*producen la misma lista; el postfijo se lee de izquierda a derecha.- Los accesos profundos quedan lineales:
$entry->{langs}->@*no necesita llaves alrededor. $entry->%*desreferencia un hashref, así quekeysysortaplican directo.scalar $nums->@*cuenta elementos, igual que lo haría la forma con signo.
Palabras clave y builtins usados aquí
joinkeysmyprintscalarsortuse
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 430
- Tokens
- 110
- Ritmo de tres estrellas
- 70 tpm
Al ritmo de tres estrellas de 70 tokens por minuto, este intento toma unos 94 segundos.
Paso 3 de 3 en Archivos y Perl moderno; paso 24 de 27 en Fundamentos del lenguaje.