http://www.perlmonks.org?node_id=1006827


in reply to Last index use in array slice

Another way to do it: instead of splitting everything and then ignoring some of it, find and split only the stuff you want.

use strict; use warnings; my $str = "discard\ndiscard\nkeep1\nkeep2"; my $discard = 2; my @arr = ($str =~ /^(?:[^\n]*\n){$discard}(.*)/s ? split /\n/, $1 : ( +) ); print "@arr";


When's the last time you used duct tape on a duct? --Larry Wall

Replies are listed 'Best First'.
Re^2: Last index use in array slice
by bart (Canon) on Dec 03, 2012 at 13:15 UTC
    Alternatively, yet still using the idea of discarding part of the output:
    my(undef, undef, @rest) = split/\n/;
    But, with a variable value for $index, I'd rather go the splice route.

      Yeah, I thought of that one, but ultimately didn't use it because, as you mentioned, it doesn't work well with an arbitrary starting index.

      You could do something like this:

      my $str = "discard\ndiscard\nkeep1\nkeep2"; my $index = 2; my @arr = grep {$index-- <= 0} split "\n", $str;


      When's the last time you used duct tape on a duct? --Larry Wall