1sub tak {
2    local($x, $y, $z) = @_;
3    if (!($y < $x)) {
4	return $z;
5    } else {
6	return &tak(&tak($x - 1, $y, $z),
7		    &tak($y - 1, $z, $x),
8		    &tak($z - 1, $x, $y));
9    }
10}
11&tak(18, 9, 0);
12