[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