Qu'est-ce que c'est
C'est simple. C'est du sucre syntaxique avec des hauts et des bas. Le pragma n'est plus nécessaire car la fonction est essentielle dans 5.24. Mais pour que la fonctionnalité soit prise en charge entre 5.20 et 5.24, elle doit être activée avec: use experimental 'postderef'
. Dans l'exemple fourni, dans Moxie, il est utilisé dans one line qui a $meta->mro->@*
; sans cela, vous devrez écrire @{$meta->mro}
.
Synopsis
Ce sont droites du blog de D Foy, ainsi que idiomatiques Perl pour la comparaison que j'ai écrit.
D Foy example Idiomatic Perl
$gimme_a_ref->()->@[0]->%* %{ $gimme_a_ref->()[0] }
$array_ref->@* @{ $array_ref }
get_hashref()->@{ qw(cat dog) } @{ get_hashref() }{ qw(cat dog) }
Ces exemples totalement fournis par D Foy,
D Foy example Idiomatic Perl
$array_ref->[0][0]->@* @{ $array_ref->[0][0] }
$sub->&* &some_sub
Arguments-pour
postderef
permet Enchaînement.
postderef_qq
facilite l'interpolation complexe dans les chaînes scalaires.
Arguments contre-
pas du tout fourni par D Foy
- Perd l'importance de Sigil. Alors que vous saviez ce que le "type" était en regardant le sceau sur le côté le plus à gauche. Maintenant, vous ne savez pas jusqu'à ce que vous lisiez toute la chaîne. Cela semble miner tout argument pour le sceau, en vous forçant à lire toute la chaîne avant de savoir ce qui est attendu. Peut-être que les jours où l'on prétend que les sigils sont une bonne décision de conception sont révolus? Mais, encore une fois, perl6 is still all about them. Manque de cohérence ici.
- Les surcharges
->
signifient comme type. Donc maintenant vous avez $type->[0][1]->@*
pour signifier dereference comme $ type, et aussi contraindre à type.
Les tranches n'ont pas une syntaxe similaire sur les primitives.
my @foo = qw/foo bar baz quz quuz quuuz/;
my $bar = \@foo;
# Idiomatic perl array-slices with inclusive-range slicing
say @$bar[2..4]; # From reference; returns bazquzquuz
say @foo[2..4]; # From primitive; returns bazquzquuz
# Whizbang thing which has exclusive-range slicing
say $bar->@[2,4]; # From reference; returns bazquz
# Nothing.
Sources