Strangely Consistent

Theory, practice, and languages, braided together

June 8 2011: Parts of strings

Our job today is simple: learning how to pick strings apart.

say "supercalifragilisticexpialidocious".substr(9, 4);  # "frag"

say substr("supercalifragilisticexpialidocious", 9, 4); # also "frag"

The 9 says "where to start" (with the first position being number 0), and the 4 says "how much to take". So we take four characters from position 9 and onwards.

As you see, there are two ways to go about this. Either we start from a string value and take the substr of that, or we start by saying substr and then which string value we want the substring of.

The first form is called a method call, and the second form a subroutine call. There are lots of methods, and the more common things (like substr and say) also exist as subroutines. It's a matter of taste and convenience which one we pick.

substr has a few more tricks up its sleeve. We often like to take things from the end, and then we can "subtract" from the end:

say "supercalifragilisticexpialidocious".substr(27, 4)  # "doci"

say "supercalifragilisticexpialidocious".substr(*-7, 4) # also "doci"

For the purposes of substr, think of the asterisk as meaning "the end of the string" or "the length of the string".

And, finally, if we know that we're going to want the rest of the string anyway, we can just leave out the second number, and it'll take the rest for us.

say "supercalifragilisticexpialidocious".substr(20)   # "expialidocious"

say "supercalifragilisticexpialidocious".substr(*-14) # same thing

Tomorrow we'll have a look at how we can avoid massive if/elsif/elsif chains.