#!/usr/bin/perl -w use strict; my %lists = ( 'test1' => { func => \&test1, data => 'stuff' }, 'test2' => { func => \&test2, data => 'things' }, ); for my $key (keys %lists) { my $code_ref = $lists{$key}->{func}; my $data = $lists{$key}->{data}; &$code_ref($data); # or use this syntax: $code_ref->($data); } sub test1 { print "New message '$_[0]' for test1\n"; } sub test2 { print "New message '$_[0]' for test2\n"; } __DATA__ New message 'stuff' for test1 New message 'things' for test2