#!/usr/bin/perl use strict; use warnings; use Data::Dumper; sub iterator (@) { my @items = @_; return sub { return shift @items }; } my $next_item = iterator qw/foo bar buz/; print Dumper $next_item->() for 0..3;