Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
Iterating over a Perl list and changing all items

You can loop through a list (we're supposed to call them "lists" not "arrays" in Perl these days!) using a foreach loop running a counter, or using the second form of foreach that doesn't provide a counter. Thus [source link]:

#!/usr/bin/perl
@demo1 = (20,30,50,60,80,200);
@demo2 = (40,70,90,40,20,10,0);
for ($k=0; $k<@demo1; $k++) {
  $demo1[$k] += 2;
  }
print ("@demo1\n");
foreach $item (@demo2) {
  $item += 3;
  }
print ("@demo2\n");


and that runs as follows:

$ perl prog.pl
22 32 52 62 82 202
43 73 93 43 23 13 3
$


Think before you codeIn the first form, you're providing a counter and know the element that you're on, thus you could make a change based on the element number. In the second form, you don't have a counter;1 however, many folks don't realise that any changes you make to the "loop variable" are saved back in the list.

In other words, the second form is a very neat way of altering every element of a list. There is no need to actually know the element number, which will allow you to simplify code in many (but not position number-dependent) places.


Note that this trick only works if you specify just an array name in the foreach statement. If you wrote
  foreach $item(@this,@that)
then changes you make to $item are not reflected back in the @this and @that lists.

Further note: the words "for" and "foreach" are interchangeable, so you could save four more bytes if you really want.

Another possibility is to use the map function, or keep your own counter and use the second form of "for". So [source link]:

!#/usr/bin/perl
@demo1 = (20,30,50,60,80,200);
@demo2 = (40,70,90,40,20,10,0);
@demo1 = map($_+7,@demo1);
print ("@demo1\n");
foreach $item (@demo2) {
  $demo2[$n] += 9;
  $n++;
  }
print ("@demo2\n");


The map function is worthy of further study. Each element of a list is put into a special variable called $_ in turn. You can then perform any operation that you wish on that item.

$ prog2.pl
27 37 57 67 87 207
49 79 99 49 29 19 9
$


Illustration - delegates on a recent Perl course
(written 2010-06-15, updated 2010-06-18)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
P208 - Perl - Lists
  [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)
  [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)
  [140] Comparison Chart for Perl programmers - list functions - (2004-12-04)
  [28] Perl for breakfast - (2004-08-25)


Back to
What is Perl?
Previous and next
or
Horse's mouth home
Forward to
Python - splitting and joining strings
Some other Articles
Setting a safety net or fallback value in Perl
Intelligent Matching in Perl
switch and case, or given and when in Perl
Python - splitting and joining strings
Iterating over a Perl list and changing all items
What is Perl?
Igloos melt in the summer, but houses do not
A course review - for the tutor to complete
Frankfurt in 90 minutes
From home to Nurnberg - journey pictures
4298 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 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., 2014: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 899360 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/2813_Ite ... items.html • PAGE BUILT: Thu Sep 18 15:30:25 2014 • BUILD SYSTEM: WomanWithCat