Was ist das?
Es ist einfach. Es ist syntaktischer Zucker mit Höhen und Tiefen. Das Pragma wird nicht mehr benötigt, da das Feature in 5.24 Kern ist. Damit das Feature zwischen 5.20 und 5.24 unterstützt wird, muss es jedoch aktiviert werden mit: use experimental 'postderef'
. In dem bereitgestellten Beispiel in Moxie wird es in one line verwendet, das $meta->mro->@*
hat; Ohne sie müssten Sie @{$meta->mro}
schreiben.
Synopsis
Diese sind gerade von D Foy Blog, zusammen mit Idiomatic Perl für den Vergleich, dass ich geschrieben habe.
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) }
Diese Beispiele vollständig von D Foy bereitgestellt,
D Foy example Idiomatic Perl
$array_ref->[0][0]->@* @{ $array_ref->[0][0] }
$sub->&* &some_sub
Arguments for
postderef
ermöglicht Verkettungs.
postderef_qq
macht komplexe Interpolation in skalaren Zeichenfolgen einfacher.
Argumente-gegen
an von D Foy nicht alle bereitgestellt
- Verliert Sigill Bedeutung. Während Sie vorher wussten, was der "Typ" war, indem Sie auf das Siegel auf der linken Seite schauten. Jetzt weißt du es nicht, bis du die ganze Kette gelesen hast. Dies scheint jedes Argument für das Siegel zu unterminieren, indem es gezwungen wird, die gesamte Kette zu lesen, bevor Sie wissen, was erwartet wird. Vielleicht sind die Tage des Arguments, dass Sigillen eine gute Designentscheidung sind, vorbei? Aber dann wieder perl6 is still all about them. Mangel an Konsistenz hier.
- Overloads
->
zu bedeuten, als Typ. So jetzt haben Sie $type->[0][1]->@*
zu dereference als $ Typ, und auch zwingen, zu schreiben.
Slices haben keine ähnliche Syntax für Primitive.
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.
Quellen