You probably can use 'state' instead of 'my' to keep $counter in scope.

foreach my $e ( 'a'..'z' ) {
    state $counter++;
    if ( $counter == 5 ) {
        say $e;
    }
}

Cheers,

Jing
On 9 Aug 2013, at 16:24, Dermot <paik...@gmail.com> wrote:

> my $counter = 0;
> foreach my $e ( a .. z ) {
>       $counter++;
>       if ( $counter == 5 ) {
>            ....
>       }
> }
> 
> I know this is a perl idiom but I, and I suspect others, would find a perl 
> variable useful for the keeping the count when iterating. The draw back with 
> the above is that $counter has scope outside of the block and that seems 
> messy. I am not sure why the C style loop, EG:
> 
> for (my $i = 0; $i =< $#items; ++$i) 
> {} 
> 
> is so unpopular. Probably because it does look nice. It does have the 
> advantage of keeping all the variables in the immediate block so you don't 
> need to worry about $counter 100 lines down the code. 
> A feature request perhaps but I'm sure there are good reasons why the 
> maintainers haven't added such a perlvar.
> Dermot.
> 
> 
> 
> On 8 August 2013 18:11, jbiskofski <jbiskof...@gmail.com> wrote:
> my $counter = 0;
> foreach my $e ( a .. z ) {
>       $counter++;
>       if ( $counter == 5 ) {
>            ....
>       }
> }
> 
> 
> On Thu, Aug 8, 2013 at 12:11 PM, jbiskofski <jbiskof...@gmail.com> wrote:
> my $counter = 0;
> foreach my $e ( a .. z ) {
>       $counter++;
>  
> 
> 
> On Thu, Aug 8, 2013 at 12:05 PM, Unknown User <knowsuperunkn...@gmail.com> 
> wrote:
> 
> Hello,
> 
> 
> If i am iterating through the elements in an array, at any point is it 
> possible to say which element i am handling without using a counter? Are 
> there any builtins that i can use for it?
> 
> ie 
> foreach my $element (a..z) { 
>    ...
>    if ( i am the 5th element ) { handle me special }
> 
> }
> 
> Thanks,
> 
> 
> 
> 

Reply via email to