#!/usr/bin/env perl use strict; use warnings; use List::Util::PP qw(min reduce); use feature qw(say); sub slide (&$@); say slide {qq(@_\n)} 2 => 1 .. 4; say slide {uc qq(@_\n)} 2 => qw(nose cuke foo bar); sub slide (&$@) { my ($code, $window) = splice @_, 0, 2; $window--; map $code->(@_[$_ .. min $_+$window, $#_]) => 0 .. $#_; } __END__ Karls-Mac-mini:Desktop karl$ 1 2 2 3 3 4 4 NOSE CUKE CUKE FOO FOO BAR BAR