Jeg sad og legede lidt med prototyper, da jeg skulle skrive sslugs
julekalendergave til den tiende.
<URL:
http://www.sslug.dk/julekalender/10.php3>
Jeg laver en funktion der ser således ud:
sub pred (&@) {
$test = shift @_;
my @result = ();
while ($_ = shift @_) {
if (&$test) { push @result, $_}
}
@result
}
(Ok, måske ikke lige den kønneste implementation, men den virker.)
Alt er skønt hvis jeg kalder den med navngivne lister:
@foo = (1, 2, 44, 65, 88, 99, 12);
@bar = pred { !($_ % 2) } @foo;
Følgende virker også:
@bar = pred { !($_ % 2) } 1, 2, 44, 65, 88, 99, 12;
Men jeg mener at dette formelt er i strid med prototypningen og vil
gerne skrive noget ala følgende:
@bar = pred { !($_ % 2) } (1, 2, 44, 65, 88, 99, 12);
Men uanset hvordan jeg gør får jeg en fejl:
berling% perl test.pl
Type of arg 1 to main::pred must be block (not list) at test.pl line 12, near ");"
Execution of test.pl aborted due to compilation errors.
Hvorf'?
--
"If I had been brought up in a different time [...] perhaps I'd
be totally comfortable in ML and would find C unsafe, a little
dangerous, not very expressive." - Brian Kernighan