What does the -> arrow do in Perl?

Solution 1:

See The Arrow Operator in perlop:

"->" is an infix dereference operator, just as it is in C and C++. If the right side is either a [...], {...}, or a (...) subscript, then the left side must be either a hard or symbolic reference to an array, a hash, or a subroutine respectively. (Or technically speaking, a location capable of holding a hard reference, if it's an array or hash reference being used for assignment.) See perlreftut and perlref.

Otherwise, the right side is a method name or a simple scalar variable containing either the method name or a subroutine reference, and the left side must be either an object (a blessed reference) or a class name (that is, a package name). See perlobj.

Solution 2:

In general, -> hints at dereference. This syntax comes from C.

In your example, it means method call: call method links from the object instance in $m. This is explained in the chapter Objects in Modern Perl. Pieces of perlsub, perlfaq7, perlobj, perltoot provide the details.

For references in general, search Stack Overflow; it is a recurring topic.

Solution 3:

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.