[sf-perl] Perl 5 script "future" revision 1.2

David Christensen dpchrist at holgerdanske.com
Sun Feb 1 19:53:24 PST 2026


On 2/1/26 17:53, Richard Reina wrote:
> What exactly is this code supposed to do?
> 
>> On Feb 1, 2026, at 7:32 PM, David Christensen wrote:
>> <snip>
>>
>> 2026-02-01 17:28:57 root at laalaa ~/sandbox/perl
>> # cat future
>> #!/usr/env/perl
>> # $Id: future,v 1.2 2026/02/02 01:26:20 dpchrist Exp $
>> # By David Paul Christensen dpchrist at holgerdanske.com
>> # Public Domain
>>
>> use strict;
>> use warnings;
>>
>> package Future;
>>
>> sub new
>> {
>>     my $class = shift;
>>     my $rc = shift;
>>     return bless(sub {return $rc->(@_)}, $class);
>> }
>>
>> package main;
>>
>> use Test::More;
>>
>> our $FutureClass = "Future";
>>
>> our $v = 'hello, world!';
>>
>> sub future(&)
>> {
>>     my $rc = shift;
>>     return bless(sub {return $rc->(@_)}, $FutureClass);
>> }
>>
>> my $f = Future->new(sub { $v });
>> my $g = future { $v };
>>
>> print $f->(), $/;
>> print $g->(), $/;
>>
>> {
>>     local $v = 'goodbye, cruel world!';
>>     print $f->(), $/;
>>     print $g->(), $/;
>> }
>>
>> print $f->(), $/;
>> print $g->(), $/;
>>
>>
>>
>> 2026-02-01 17:28:59 root at laalaa ~/sandbox/perl
>> # perl future
>> hello, world!
>> hello, world!
>> goodbye, cruel world!
>> goodbye, cruel world!
>> hello, world!
>> hello, world!

The code is supposed to test/ demonstrate the following capabilities in 
Perl 5.  It is a thought exercise, not production quality, and likely 
contains conceptual and other defects:

1.  Class "Future" with a class method (constructor) "new" that accepts 
a code reference as an argument and returns a copy of that code 
reference as an object.

2.  When the object is invoked, the code reference runs and has access 
to variables within the caller's lexical scope.

3.  If the caller localizes a variable, when invoked the code reference 
sees the localized value of the variable.

4.  When the variable localization goes out of scope, when invoked the 
code reference sees the previous value of the variable.

5.  Similar to the above, but the object is created by a subroutine 
(factory function) "future" with a prototype of "&" (block) to provide 
syntactic sugar.  ("future" should be within package "Future", but I was 
unable to figure out how to get Exporter and "use qw(future)" working.)


David



More information about the SanFrancisco-pm mailing list