Procedury jako argumenty

Referencje do procedur są skalarami, więc mogę je przekazywać do innych procedur jako argumenty:

my $nameless_sub = sub { ... };
foo( $nameless_sub );

Nie chcę jednak przekazywać ich jako skalarów, lecz wykonać bardziej ekscentryczną operację, którą instrukcje sort, map i grep realizują z wykorzystaniem wplecionych bloków:

my @odd_numbers = grep { $_ % 2 } 0 .. 100;

my @squares     = map  { $_ * $_ } 0 .. 100;

my @sorted      = sort { $a <=> $b } qw( 1 5 2 0 4 7 );

Aby ta magia zadziałała, muszę użyć prototypów procedur. Niektórzy twierdzą, że prototypy są nie dość że bezużyteczne, to jeszcze szkodliwe, ale w tym przypadku potrzebuję ich, aby zasygnalizować Perlowi, że nagi blok kodu reprezentuje procedurę.

Przypuśćmy, że chcę ...

Get Perl. Mistrzostwo w programowaniu now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.