#! /usr/bin/perl use strict; use warnings; use B::Deparse; sub str_code { my $coderef = shift; return "sub " . B::Deparse->new("-sC")->coderef2text( $coderef ); } my $coderef = sub { print "Hello world\n" }; print "We have a coderef $coderef\n"; print "Which we can run like this: "; $coderef->(); my $deparsed_coderef = str_code( $coderef ); print "Which we can deparse to this: $deparsed_coderef\n"; my $new_coderef = eval $deparsed_coderef; print "Which we can eval to another coderef $coderef\n"; print "Which we can run just like the original: "; $new_coderef->(); __END__ # produces We have a coderef CODE(0x361a98) Which we can run like this: Hello world Which we can deparse to this: sub { use warnings; use strict 'refs'; print "Hello world\n"; } Which we can eval to another coderef CODE(0x361a98) Which we can run just like the original: Hello world