From 06fb0dfd62ec5d712e34d960b2cee9eddbf90336 Mon Sep 17 00:00:00 2001 From: Guillermo Ramos Date: Fri, 4 Oct 2019 14:45:53 +0200 Subject: [027#2] --- 027/ch2.pl | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 027/ch2.pl diff --git a/027/ch2.pl b/027/ch2.pl new file mode 100755 index 0000000..25bd645 --- /dev/null +++ b/027/ch2.pl @@ -0,0 +1,45 @@ +#!/usr/bin/env perl +# +# Write a script that allows you to capture/display historical data. It could be +# an object or a scalar. For example +# +# my $x = 10; $x = 20; $x -= 5; +# +# After the above operations, it should list $x historical value in order. +################################################################################ + +use strict; +use warnings; + +{ + package Hist; + + require Tie::Scalar; + our @ISA = qw; + + sub TIESCALAR { + return bless \my @histogram, shift; + } + sub FETCH { + my @self = @{shift()}; + printf STDERR "History of values: %s\n", join(", ", @self); + return @self[@self-1] + } + sub STORE { + my $self = shift; + my $value = shift; + push @$self, $value; + } +} + +tie my $x, 'Hist'; + +$x = 10; +$x = 20; +$x = -5; + +my $y = $x; +print "y=$y\n"; + +$x = 200; +print "x=$x\n"; -- cgit v1.2.3