Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Answer: How do I pull n characters off the front of a string?

( #296137=categorized answer: print w/ replies, xml ) Need Help??

Q&A > strings > How do I pull n characters off the front of a string? contributed by davido

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;

Comment on Answer: How do I pull n characters off the front of a string?
Select or Download Code
Re: Answer: How do I pull n characters off the front of a string?
by Aristotle (Chancellor) on Oct 03, 2003 at 22:31 UTC
    unpack:
    ($chars, $string) = unpack "a$n a*", $string;
    The four parameter substr is clearly the cleanest solution though.

    Makeshifts last the longest.

Log In?
Username:
Password:

What's my password?
Create A New User
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (6)
As of 2014-12-19 01:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (70 votes), past polls