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.