open (FH,"ac_20090225");
@stuff = <FH>;
@interesting = grep(/horse/i,@stuff);
print @interesting;
In Perl, an @ in front of a variable makes it into a list - and a list variable has the advantages of an array in other languages ... without the disadvantages. And it can do a lot more too.
In the example above, I've opened a large file and read THE WHOLE FILE into a list called @stuff. There's no need to say how big it will be - Perl works that out dynamically - and assigns one line of the incoming file to each list (array) element.
I've then filtered the list via Perl's built in grep function, looking for all the elements of the list which contain "horse", and putting them into another and shorter list (grep is like a filter - it selects rather than changes elements)
Finally, I've printed out just the interesting lines - the lines that contain 'horse' - from the shorter list.
The test file I used in this little example contained 147,720 lines (our daily web site log file), and the filtered output contained 782. But the script was not slow in running, because there are no loops in the script - there were just four lines to be interpreted and run, with the looping done at the efficient lower level within Perl itself.
From yesterday's
Perl Programming course.
(written 2009-03-05)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
P208 - Perl - Lists [28] Perl for breakfast - (2004-08-25)
[140] Comparison Chart for Perl programmers - list functions - (2004-12-04)
[230] Course sizes - beware of marketing statistics - (2005-02-27)
[240] Conventional restraints removed - (2005-03-09)
[355] Context in Perl - (2005-06-22)
[463] Splitting the difference - (2005-10-13)
[560] The fencepost problem - (2006-01-10)
[622] Queues and barrel rolls in Perl - (2006-02-24)
[762] Huge data files - what happened earlier? - (2006-06-15)
[773] Breaking bread - (2006-06-22)
[928] C++ and Perl - why did they do it THAT way? - (2006-11-16)
[968] Perl - a list or a hash? - (2006-12-06)
[1304] Last elements in a Perl or Python list - (2007-08-16)
[1316] Filtering and altering Perl lists with grep and map - (2007-08-23)
[1703] Perl ... adding to a list - end, middle, start - (2008-07-09)
[1828] Perl - map to process every member of a list (array) - (2008-10-09)
[1917] Out of memory during array extend - Perl - (2008-12-02)
[1918] Perl Socket Programming Examples - (2008-12-02)
[2226] Revision / Summary of lists - Perl - (2009-06-10)
[2295] The dog is not in trouble - (2009-07-17)
[2484] Finding text and what surrounds it - contextual grep - (2009-10-30)
[2813] Iterating over a Perl list and changing all items - (2010-06-15)
[2833] Fresh Perl Teaching Examples - part 2 of 3 - (2010-06-27)
[2996] Copying - duplicating data, or just adding a name? Perl and Python compared - (2010-10-12)
[3400] $ is atomic and % and @ are molecular - Perl - (2011-08-20)
[3548] Dark mornings, dog update, and Python and Lua courses before Christmas - (2011-12-10)
[3669] Stepping through a list (or an array) in reverse order - (2012-03-23)
[3870] Writing more maintainable Perl - naming fields from your data records - (2012-09-25)
[3906] Taking the lead, not the dog, for a walk. - (2012-10-28)
[3939] Lots of ways of doing the same thing in Perl - list iteration - (2012-12-03)
[4609] Mapping an array / list without a loop - how to do it in Perl 6 - (2016-01-03)
Some other Articles
Setting up a MySQL database from PHPConverting to Perl - the sort of programs you will writeEfficient calls to subs in Perl - avoid duplication, gain speedPlaying CatchupPerl - lists do so much more than arraysMelksham Industrial Static mirroring through HTTrack, wget and othersEast of Melksham CountrysideInternal Dummy Connections on Apache httpdVirtual hosting and mod_proxy forwarding of different domains (httpd)