
In Perl, you can extract data from a string in a lot of different ways. You can split the string if you want to use a uniform separator, you can use a regular expression if you want to grab out bits that match a pattern, and you can use substr to extract data based on specific character positions.
Which should I use?
Whichever is most appropriate. If the data is always in the same columns numbers (character positions), then
substr may be longer code but faster than the alternatives. And don't forget csv (comma separated variables) and XML modules too.
But rather than have many lines of
substr, you may prefer to use
unpack. Unpack lets you specify a list of destinations, and a number of columns and series of type conversions. So one line of
unpack can replace many lines of
substr and at no noticeable loss of efficiency. You can also use unpack if you have binary data held in your string.
I've added an example of
unpack in use -
[here] - from the current course. And I've also added in an example going the other way - taking a whole load of variables in a list and formatting them up into a string with
pack
Perl's functions are documented
[here]. The format converters for
unpack (and pack) are documented
[here]. We cover these functions - briefly - on our fundamental public
Perl Programming Courses and in more detail if required on advanced and private courses.
(written 2010-07-16, updated 2010-07-31)
Associated topics are indexed under
P212 - Perl - More on Character Strings [3546] The difference between dot (a.k.a. full stop, period) and comma in Perl - (2011-12-09)
[3411] Single and double quotes strings in Perl - what is the difference? - (2011-08-30)
[3332] DNA to Amino Acid - a sample Perl script - (2011-06-24)
[3322] How much has Perl (and other languages) changed? - (2011-06-10)
[3100] Looking ahead and behind in Regular Expressions - double matching - (2010-12-23)
[3059] Object Orientation in an hour and other Perl Lectures - (2010-11-18)
[2993] Arrays v Lists - what is the difference, why use one or the other - (2010-10-10)
[2877] Further more advanced Perl examples - (2010-07-19)
[2834] Teaching examples in Perl - third and final part - (2010-06-27)
[2801] Binary data handling with unpack in Perl - (2010-06-10)
[2657] Want to do a big batch edit? Nothing beats Perl! - (2010-03-01)
[2379] Making variables persistant, pretending a database is a variable and other Perl tricks - (2009-08-27)
[2230] Running a piece of code is like drinking a pint of beer - (2009-06-11)
[1947] Perl substitute - the e modifier - (2008-12-16)
[1735] Finding words and work boundaries (MySQL, Perl, PHP) - (2008-08-03)
[1727] Equality and looks like tests - Perl - (2008-07-29)
[1510] Handling Binary data (.gif file example) in Perl - (2008-01-17)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1251] Substitute operator / modifiers in Perl - (2007-06-28)
[1230] Commenting a Perl Regular Expression - (2007-06-12)
[1222] Perl, the substitute operator s - (2007-06-08)
[943] Matching within multiline strings, and ignoring case in regular expressions - (2006-11-25)
[928] C++ and Perl - why did they do it THAT way? - (2006-11-16)
[737] Coloured text in a terminal from Perl - (2006-05-29)
[608] Don't expose your regular expressions - (2006-02-15)
[597] Storing a regular expression in a perl variable - (2006-02-09)
[586] Perl Regular Expressions - finding the position and length of the match - (2006-02-02)
[583] Remember to process blank lines - (2006-01-31)
[453] Commenting Perl regular expressions - (2005-09-30)
Some other Articles
Program for reliability and efficiency - do not duplicate, but rather share and re-useDifferent perl examples - some corners I rarely exploreA long day in Melksham ...Unpacking a Perl string into a listAnother toot of the trumpetMoved - Melksham Lorry ParkMoving from Python 2.6 to Python 3Old prices - what would the equivalent price have been in 1966?Contact Information for Melksham Oak Community School