#!/usr/bin/perl -- use strict; # use warnings; sub factoryOne { my ($var) = (@_); print "factory: '$var'\n"; return sub { eval { print "eval: '$var'\n" }; } } sub factoryTwo { my ($var) = (@_); print "factory: '$var'\n"; return sub { my $estr = "print \"eval: '\$var'\n\""; eval $estr; } } sub factoryThree { my ($var) = (@_); print "factory: '$var'\n"; return sub { $var; my $estr = "print \"eval: '\$var'\n\""; eval $estr; } } my $f = factoryOne('lulz'); $f->(); my $g = factoryTwo('frunz'); $g->(); my $h = factoryThree('lulz'); $h->(); #### factory: 'lulz' eval: 'lulz' factory: 'frunz' eval: '' factory: 'lulz' eval: 'lulz'