diff --git a/lib/modules/Function.pmod b/lib/modules/Function.pmod
index 8dd28cfab3dd2a59fc8b7c13fbd952791029d7bb..100562693885e649009d0678e764e88ba3fb462a 100644
--- a/lib/modules/Function.pmod
+++ b/lib/modules/Function.pmod
@@ -1,3 +1,40 @@
 #pike __REAL_VERSION__
 
 constant defined = __builtin.function_defined;
+
+//! Calls the given function with the @tt{args@} array plus the optional
+//! extra arguments as its arguments and returns the result.
+//!
+//! Most useful in conjunction with @ref{map@}, and particularly in combination
+//! with @ref{sscanf@} with @tt{"...%{...%}..."@} scan strings (which indeed
+//! was what it was invented for in the first place).
+//!
+//! @example
+//!   class Product(string name, string version)
+//!   {
+//!     string _sprintf()
+//!     {
+//!       return sprintf("Product(%s/%s)", name, version);
+//!     }
+//!   }
+//!   map(({ ({ "pike",   "7.1.11" }),
+//!          ({ "whitefish", "0.1" }) }),
+//!       Function.splice_call, Product);
+//!   ({ /* 2 elements */
+//!	 Product(pike/7.1.11),
+//!	 Product(whitefish/0.1)
+//!   })
+//! @endexample
+//!
+//! @param args
+//!  the first arguments the function @tt{f@} expects
+//! @param f
+//!  the function to apply the arguments on
+//! @param extra
+//!  optional extra arguments to send to @tt{f@}
+//! @returns
+//!  whatever the supplied function @tt{f@} returns
+mixed splice_call(array args, function f, mixed|void ... extra)
+{
+  return f(@args, @extra);
+}