原文链接:https://stackoverflow.com/questions/4913280/what-does-the-arrow-do-in-perl
In general, -> hints at dereference. This syntax comes from C. An example may be like this:
$pm->run_on_finish( sub {
my ($pid, $exit_code, $ident, $exit_signal, $core_dump, $data_structure_reference) = @_;
my $q = $data_structure_reference->{input};
$results{$q} = $data_structure_reference->{result};
});
foreach my $q (@numbers) {
my $pid = $pm->start and next;
my $res = calc($q);
$pm->finish(0, { result => $res, input => $q });
}
While =>
is equal to comma.
Perl arrow operator has one other use:
Class−>method
invokes subroutine method in package Class.
Though it’s completely different than your code sample. Only including it for completeness for the question in the title.
The outer @{}
part is a dereference - this implies $m->links
is a reference to an array, so this operator deferences it to refer to the array directly, which is then copied to @top_links
Chapter 8 of the ‘Camel Book’ is a good place to learn about references, or the perlref section of the Perl documentation.
The ->
arrow operator is an object dereference, in this case fetching the links member of the $m object. Similarly, later chapters of the Camel Book cover Perl’s object oriented support in detail. See the perlobj section of the Perl documentation also.