in reply to Re: Splitting in while loop
in thread Splitting in while loop

In non-slurp mode, this works via assignment using the diamond operator (<>) - or just the same if you open an file handle, $FH:
# test.pl while (my $line = <>) { chomp $line; print qq{$line\n}; # yes I know, pointless use of chomp }
> perl test.pl < test.pl # test.pl while (my $line = <>) { chomp $line; print qq{$line\n}; # yes I know, pointless use of chomp }
Similarly, you could do something destructive with pop or shift, like,
while (my $item = pop @my_array) { # do stuff with $item }

Replies are listed 'Best First'.
Re^3: Splitting in while loop
by haukex (Archbishop) on Oct 12, 2021 at 16:41 UTC
    while (my $line = <>) ... Similarly, ... while (my $item = pop @my_array)
    use warnings; use strict; while (my $line = <DATA>) { chomp $line; print "<$line>\n"; } my @array = ("Foo","0","Bar"); while (my $item = pop @array) { print "[$item]\n"; } __DATA__ Hello 0 World

    Outputs:

    <Hello> <0> <> <World> [Bar]

    I'd call that a pretty serious caveat. As per I/O Operators, the first is equivalent to while ( defined( my $line = <> ) ), and readline returns undef at EOF, while the second one will stop at any false value, and arrays can contain undefs too.