#first a simple demo sub foo{ print "foo ",scalar caller,"\n";goto &bar} sub bar{ print "bar ",scalar caller,"\n";goto &baz} sub baz{ print "baz ",scalar caller,"\n";goto &bunk} sub bunk{ print "bunk ",scalar caller,"\n";} # now the chained functions sub foo1{ print "foo1 ",scalar caller,"\n";chain(@list)} sub bar1{ print "bar1 ",scalar caller,"\n";chain(@list)} sub baz1{ print "baz1 ",scalar caller,"\n";chain(@list)} sub bunk1{ print "bunk1 ",scalar caller,"\n";chain(@list)} sub chain{ if(@list){ my $func = shift @list; goto &$func; } } # run the demo foo(); # now establish the chain and call the funcs # @list = qw(foo1 bar1 baz1 bunk1); chain(@list);