NAME
Pointy::Counter - funny syntax for loops
SYNOPSIS
use Pointy::Counter;
my $i = counter;
while ($i --> 10)
{
say "\$i is $i";
}
# says $i is 1
# says $i is 2
# ...
# says $i is 10
DESCRIPTION
Pointy::Counter is a class that provides objects which seem to act like
numbers, but have a special `-->` operator to count up to a particular
value.
OK, confession time... `-->` is not really an operator. It's a
post-increment followed by a greater than sign.
$i --> 10
is parsed by Perl like:
($i--) > 10
Then the Pointy::Counter class overloads `--` to increment rather than
decrement, and overloads `>` to act as a less-than. If you try to perform
any other maths, it should just act as a normal scalar. In particular,
note that this means that while `$i--` will do a counter increment; `$i -=
1` will act completely differently, decrementing the counter and restoring
it to a normal Perl scalar.
Constructor
`Pointy::Counter->new($initial)`
Creates a new counter, with the initial value (defaults to 0). Note
that the counter will have value $initial before the loop starts, but
within the body of the loop, it will be `$initial+1`, `$initial+2`,
etc.
`counter $initial`
This module exports a function which can be called as a shortcut for
the constructor.
Methods
`value`
Returns current value as a plain old Perl scalar. This is an lvalue
subroutine, so you can, for example, reset a counter using:
$i->value = 0;
`continue`
Really does decrement the counter. This is used to solve a small
niggling problem:
my $x = counter;
while ($x --> 2)
{
say "Counter is $x (loop A)";
}
while ($x --> 4)
{
say "Counter is $x (loop B)";
}
Will output:
Counter is 1 (loop A)
Counter is 2 (loop A)
Counter is 4 (loop B)
Why doesn't it output a line for when its value is 3? That's because
it only takes the value 3 *between* the two loops. The solution is to
decrement the counter before starting loop B:
my $x = counter;
while ($x --> 2)
{
say "Counter is $x (loop A)";
}
$x -> continue;
while ($x --> 4)
{
say "Counter is $x (loop B)";
}
This gives you:
Counter is 1 (loop A)
Counter is 2 (loop A)
Counter is 3 (loop B)
Counter is 4 (loop B)
BUGS
Please report any bugs to
<http://rt.cpan.org/Dist/Display.html?Queue=Pointy-Counter>.
SEE ALSO
overload, perlsyn.
AUTHOR
Toby Inkster <tobyink@cpan.org>.
COPYRIGHT AND LICENCE
This software is copyright (c) 2011 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under the
same terms as the Perl 5 programming language system itself.
DISCLAIMER OF WARRANTIES
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.