Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Python and Tcl - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Lua, etc
 
Comparison Chart for Perl programmers - list functions

grep v map v sort

Most languages support lists and / or arrays - and that includes Perl. In Perl, though, you can use functions such as grep, map, sort and reverse to operate on lists as a whole rather than having to loop through members of the list cell by cell.


functiondesciption of actionelement countelements altered?Output element order
grepFilters incoming elements and copies those which match a criteria to the output list"n" elements in, 0 to "n" elements outoutgoing elements are exact copies of incoming elementsoutgoing elements are in same order as incoming elements
mapPerforms an operation on each incoming element and writes the result to the output list"n" elements in, "n" elements outoutgoing elements are the result of an operation on incoming elementsoutgoing elements are in same order as incoming elements
sortRe-orders the incoming elements and writes the result to the output list"n" elements in, "n" elements outoutgoing elements are exact copies of incoming elementsoutgoing elements are in a different order to the incoming elements
reverseWrites the incoming elements to the output list in reverse order"n" elements in, "n" elements outoutgoing elements are exact copies of incoming elementsoutgoing elements are "back to front" from the incoming elements


It's a common misconception that grep is used only to filter incoming members against a regular expression - it CAN be (and that's the most common use and how it got its name), but it can also be used to perform another task, based on each member of the incoming list in turn being put into $_. The following sample program shows two uses of grep and two of map to illustrate the comments just made and parts of the table above.


# antonia Perl XML PHP Tcl/Tk MySQL
# barbara Tcl/Tk ASP Ruby Java
# cherry Perl Java Ruby MySQL

open (FH,"requests.xyz") or die "No requests.xyz file\n";
@stuff = grep (/^.[aeiou]/,<FH>); # Only want lines with vowel as 2nd letter

@m1 = grep((split)>5,@stuff); # Filter to remove short lines
print @m1;
print "============================\n";
@m1 = map(uc,@m1); # Change all lines to all upper case
print @m1;
print "============================\n";
@m3 = map(length()."\n",@m1); # Produce a list of line lengths
print @m3;


I ran this against a test data file of 52 lines (I've pasted the first three lines into the sample code above) and here are the results - you'll see that the only lines left by grep are those which comprise over 5 space separated fields, and have a lower case vowel as the second letter.


[localhost:~/dplp] graham% perl nq
hazel PHP Python Perl Ruby ASP
leane PHP Python ASP Perl Java
margaret XML Perl Ruby MySQL Tcl/Tk
petra XML Tcl/Tk ASP Perl Ruby
xena Java Perl PHP ASP XML
barry Python XML Java Perl PHP
============================
HAZEL PHP PYTHON PERL RUBY ASP
LEANE PHP PYTHON ASP PERL JAVA
MARGARET XML PERL RUBY MYSQL TCL/TK
PETRA XML TCL/TK ASP PERL RUBY
XENA JAVA PERL PHP ASP XML
BARRY PYTHON XML JAVA PERL PHP
============================
31
31
36
31
28
31
[localhost:~/dplp] graham%


There are further examples of the use of functions such as grep (and push and pop and others too) available under our training note pages.
(written 2004-12-04, updated 2006-06-05)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
P208 - Perl - Lists
  [4609] Mapping an array / list without a loop - how to do it in Perl 6 - (2016-01-03)
  [3939] Lots of ways of doing the same thing in Perl - list iteration - (2012-12-03)
  [3906] Taking the lead, not the dog, for a walk. - (2012-10-28)
  [3870] Writing more maintainable Perl - naming fields from your data records - (2012-09-25)
  [3669] Stepping through a list (or an array) in reverse order - (2012-03-23)
  [3548] Dark mornings, dog update, and Python and Lua courses before Christmas - (2011-12-10)
  [3400] $ is atomic and % and @ are molecular - Perl - (2011-08-20)
  [2996] Copying - duplicating data, or just adding a name? Perl and Python compared - (2010-10-12)
  [2833] Fresh Perl Teaching Examples - part 2 of 3 - (2010-06-27)
  [2813] Iterating over a Perl list and changing all items - (2010-06-15)
  [2484] Finding text and what surrounds it - contextual grep - (2009-10-30)
  [2295] The dog is not in trouble - (2009-07-17)
  [2226] Revision / Summary of lists - Perl - (2009-06-10)
  [2067] Perl - lists do so much more than arrays - (2009-03-05)
  [1918] Perl Socket Programming Examples - (2008-12-02)
  [1917] Out of memory during array extend - Perl - (2008-12-02)
  [1828] Perl - map to process every member of a list (array) - (2008-10-09)
  [1703] Perl ... adding to a list - end, middle, start - (2008-07-09)
  [1316] Filtering and altering Perl lists with grep and map - (2007-08-23)
  [1304] Last elements in a Perl or Python list - (2007-08-16)
  [968] Perl - a list or a hash? - (2006-12-06)
  [928] C++ and Perl - why did they do it THAT way? - (2006-11-16)
  [773] Breaking bread - (2006-06-22)
  [762] Huge data files - what happened earlier? - (2006-06-15)
  [622] Queues and barrel rolls in Perl - (2006-02-24)
  [560] The fencepost problem - (2006-01-10)
  [463] Splitting the difference - (2005-10-13)
  [355] Context in Perl - (2005-06-22)
  [240] Conventional restraints removed - (2005-03-09)
  [230] Course sizes - beware of marketing statistics - (2005-02-27)
  [28] Perl for breakfast - (2004-08-25)


Back to
Just provide a room and the students
Previous and next
or
Horse's mouth home
Forward to
Too technical?
Some other Articles
Tcl sandwich - lists in Tcl
Network Camera
Colour for access
Too technical?
Comparison Chart for Perl programmers - list functions
Just provide a room and the students
Perl - redo and last without a loop
Certification schemes
Please tell us
Too many Perls
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2019: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
PH: 01225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/140_Comp ... tions.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat