in reply to Re: How to distinct the call position of a sub?
in thread How to distinct the call position of a sub?
Update: In some versions of perl (5.8.8 and 5.10.0 reported in the CB), an infinite loop results if you delete the print "$x\n"; line. It seems that unless there is some executable statement between the two while loops, caller reports them as happening on the same line. While I think this is a bug in perl, it also shows why this is not a good solution. Running perl -MO=Deparse doesn't seem to support why perl believes they are on the same line.#!/usr/bin/perl use strict; use warnings; { my %seen; sub iter { my ($beg, $end, $by) = @_; my $key = join '*', caller(); return $seen{$key}->() if $seen{$key}; my $pos = $beg - $by; $seen{$key} = sub { $pos += $by; if ($pos > $end) { delete $seen{$key}; return; } return $pos; }; return $seen{$key}->(); } } while (my $x = iter(1, 10, 1)) { print "$x\n"; while (my $y = iter(1, 10, 1)) { print "$x - $y\n"; } }
Cheers - L~R
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: How to distinct the call position of a sub?
by almut (Canon) on Nov 24, 2008 at 20:56 UTC |