Data::Postponed::Once - Delayed evaluation expressions are "collapsed" once observed
Example using postpone_once()
postpone_once()
use Data::Postponed 'postpone_once'; %functions = ( foobar => 'foo' ); $code = "sub " . postpone_once( $functions{foobar} ) . " { return time }"; $functions{foobar} = "baz"; # Reflects the new name of 'bar' instead of 'foo'. $code isn't # overloaded anymore. print $code; # The change to $functions{foobar} is no longer reflected in $code $functions{foobar} = "quux"; print $code;
Example using the OO
use Data::Postponed; %functions = ( foobar => 'foo' ); $code = "sub " . Data::Postponed::Once->new( $functions{foobar} ) . " { return time }"; $functions{foobar} = "baz"; # Reflects the new name of 'bar' instead of 'foo'; print $code; # The change to $functions{foobar} is no longer reflected in $code $functions{foobar} = "quux"; print $code;
The value of expressions that have had postpone called on them are in flux until finalized. Once finalized, they are no longer overloaded.
If you want to also prevent changes to input variables because you don't want to accidentally think you're reaching back in time when you're not, use Data::Postponed::OnceOnly.
Returns a new overloaded object bound to whatever was passed in as the EXPR.
""
0+
bool
Each of these methods are overridden from Data::Postponed. If you wished to only finalize strings, you might just copy the "" and new methods to your own subclass of Data::Postponed.
new
Data::Postponed, Data::Postponed::OnceOnly, Data::Postponed::Forever, overload
This is inspired by what I originally thought Quantum::Superpositions did. Here, the idea is that a value's actual value is in flux until it is examined hard enough and then is a real value.
The companion module Data::Postponed::OnceOnly is used in B::Deobfuscate to turn a two pass algorithm into a single pass. I would have had to do a complete run to get a final symbol table and then run it again to actually use the symbol table. This module allows me to change my mind about the values I've returned.
Joshua ben Jore, <jjore@cpan.org>
<jjore@cpan.org>
Please report any bugs or feature requests to bug-data-postponed@rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data-Postponed. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-data-postponed@rt.cpan.org
Corion of perlmonks.org
Copyright 2005 Joshua ben Jore, All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
To install Data::Postponed, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Data::Postponed
CPAN shell
perl -MCPAN -e shell install Data::Postponed
For more information on module installation, please visit the detailed CPAN module installation guide.