in reply to Perl's feature to determine, in current point of loop, that this is the last one?

That depends on the loop (for,while,map,...) and the iterated thing.

Could you be more specific, or at least point to another language which can do this?

update

Here a counter example to explain one difficulty:

Consider a while loop iterating over human input, how should the loop know in advance that the user will stop the input in the next iteration?

while ( my ($in) = human_input() ) { do_something($in); }

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

  • Comment on Re: Perl's feature to determine, in current point of loop, that this is the last one? (updated: while unpredictable)
  • Download Code

Replies are listed 'Best First'.
Re^2: Perl's feature to determine, in current point of loop, that this is the last one? (updated: while unpredictable)
by ikegami (Patriarch) on Jan 23, 2022 at 17:32 UTC

    It can't be solved generically for while loops.

    while (@a) { shift(@a); if ( is_last_pass() ) { push @a, "foo"; } }

    But, you can "peek ahead" sometimes.

Re^2: Perl's feature to determine, in current point of loop, that this is the last one? (arrays unpredictable)
by LanX (Saint) on Jan 23, 2022 at 16:13 UTC
    So lets suppose it's "only" needed for the case foreach(@array) which isn't an iterator but dealing with a flattened list, right?

    I don't think so, @array could be tied to an iterator via Tie::Array and IIRC there are already modules on CPAN exploiting this "backdoor".

    FWIW it also offers some syntactic sugar to implement your desired feature for a static @array, by designing a sub which returns a tied array-ref wrapping the static one:

    for my $var ( @{ guard_last(@array,my $last) } ) { say "IS LAST" if $last; say $var; }
    edit

    And I'm pretty sure this won't work with Perls older than ~5.10

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery