#! /usr/bin/perl -w use strict; sub foo { "this is foo" } sub bar { "this is bar" } my @later; sub do_it { my $ref = shift; if( ref($ref) eq 'CODE' ) { print "do it now: ", $ref->(), "\n"; } elsif( ref($$ref) eq 'CODE' ) { push @later, $$ref; } } do_it( \&foo ); do_it( \\&bar ); print "deferred ", $_->(), "\n" for @later;