in reply to Re^2: howto map/grep a complex structure
in thread howto map/grep a complex structure
I can't say I agree with the overall approach of trippledubs here, but I think the use of prototypes therein can be said to have a constructive and well understood purpose.
As written, collectLeaves() is recursive, and within the function the calls such as
&collectLeaves( $_, $leaves ) for ( @{$ds} );
serve the purpose of suppressing prototype checking so the $leaves reference can be passed in recursive calls.
Outside the function, prototyping allows calls like
my @wanted = grep { $_ == 7 } collectLeaves $hashref1, collectLeaves $hashref2;
to be made, while
... collectLeaves($hashref1, $hashref2) ...
will fail to compile.
(But S([],[42]) will not compile.)c:\@Work\Perl\monks>perl -wMstrict -le "sub S ($) { return $_[0] + print 0+@{$_[0]}, ' elements in ', 0+$_[0] +; } ;; print S [], S [42], 33; " 0 elements in 7450732 1 elements in 30219348 74507333021934933
Again, I don't say I necessarily agree with the approach, but I cannot agree that prototyping has been sprinkled thoughtlessly onto the code as a kind of magical correctness dust, as we have often seen. OTOH, I agree with you that the response of future maintainers to this code (or recursive functions in general) is a valid concern.
Give a man a fish: <%-{-{-{-<
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: howto map/grep a complex structure
by trippledubs (Deacon) on Aug 27, 2015 at 21:50 UTC | |
by AnomalousMonk (Archbishop) on Aug 28, 2015 at 17:01 UTC |