The other examples all handed off the first $n characters. But they didn't remove those first $n characters from the original $string, as the question required.
As always, there is more than one way to do it. For each of the examples below, assume the following setup:
my $string = "1234567890abcdefghijABCDEFGHIJK";
my $chars;
my $n = 2;
With substr:
$chars = substr( $string, 0, $n );
substr( $string, 0, $n ) = "";
Another with substr:
( $chars, $string ) = ( substr($string,0,$n), substr($string,$n) );
And probaby the best substr solution:
$chars = substr ($string, 0, $n, "");
With a substitution s/// regexp:
$string = s/^(.{$n})(.*)$/$2/s;
$chars = $1;
With split:
($chars, $string) = split /^(.{$n})/, $string, 1;
With a pattern match (m//):
($chars, $string) = $string =~ /^(.{$n})(.*)$/s;
With unpack (Not for the faint of heart):
( $chars, $string ) = unpack "a$n a@{[length($string)-$n]}", $string;
|