Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
Using English can slow you right down!

When you're programming and you assign a variable, that's usually a single result. For example (we're talking Perl in these examples)
$position = $record % $pagelength;

However, there are often side effects of an action which you might want to make later use of too. For example:
$postcode = ($pc =~ /^[A_Z]{1,2}\d[A-Z0-9]?\s/);
will return a true of false result into $postcode indicating whether the string in $pc starts in the correct format for the first part of a UK postcode ...but you might also want to know what the actual string that matched was, and what was left of the incoming string that's not matched by the regular expression. Perl makes this easy for you - if you know what they're called, you can refer to other special variables in your program that contain these resultant side effects.

These "side effects" are a feature of real life too. If I tidy up my office it results in a neat desk. And the side effects include a full rubbish bin and also a box for recycling!

Three of the special variables used in regular expression matching are $`, $' and $& (yes, not the normal rules for variable names). They provide the bit that matched, the bit before the match, and the bit after the match. There are a whole host of others too - both on regular expression matching and many other aspects of what happens when Perl runs - you have $. telling you how many lines yoiu have read since tou opened a file ... $$ telling you your process ID, $^O for your operating system's name and so on.

You can get mighty confused as to what's what if you're new to Perl so there's an additional module supplied with the standard distribution called English and you can call it in with
use English;
giving you extra variable names such as $MATCH and $POSTMATCH and $OSNAME which make you code much more readable.

There is, though, a sting in the tail. If your program is going to use $' $` or $& anywhere in the code, then Perl has to save out the extra variables for every regular expression match it does - even those which are nowhere near the use of those special variables. And that means that if you are matching repeatedly against a very long string, it can have a serious effect on performance to use them. The English module provides aliases to $` $' and $& and in doing so it makes reference to them - thus triggering any Perl program that includes a use English; to evaluate them at every match with this potentially huge loss of efficiency at run time

It's a bit of an "old wives's tale" that English slows you down, so I've written a very short benchmark to show what happens:

$sample = "abcdefghij" x 1000;
$longer = ($sample . "12345") x 1000;
$evenlonger = ($longer . "zzz") x 10;
print (length ($longer),"\n");
@taken = times();
print ("@taken\n");
 
for ($k=0; $k<100; $k++) {
   if ($evenlonger =~ /5z/) { $lc++;}
   print "$lc\n" unless ($lc % 25);
}
@taken = times();
print ("@taken\n");


And that took about 7 seconds of cpu time:

earth-wind-and-fire:~/nov07 grahamellis$ perl tidemo
10005000
0.88 0.7 0 0
25
50
75
100
6.54 0.71 0 0
earth-wind-and-fire:~/nov07 grahamellis$


Adding in a single extra use English; at the top, without even making any other changes like using the names at all in my own code, I got:

earth-wind-and-fire:~/nov07 grahamellis$ perl tidemo
10005000
0.89 0.73 0 0
25
50
75
100
25.8 28.2 0 0
earth-wind-and-fire:~/nov07 grahamellis$


So that's around 53 seconds of cpu time rather than the previous 7.

I always wondered why English seems such a slow way of communicating ;-)



(written 2007-11-25)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
P219 - Perl - Libraries and Resources
  [86] Talk review - Idiomatic Perl, David Cross - (2004-10-12)
  [112] Avoid the wheel being re-invented by using Perl modules - (2004-11-08)
  [357] Where do Perl modules load from - (2005-06-24)
  [358] Use standard Perl modules - (2005-06-25)
  [712] Why reinvent the wheel - (2006-05-06)
  [737] Coloured text in a terminal from Perl - (2006-05-29)
  [760] Self help in Perl - (2006-06-14)
  [1219] Judging the quality of contributed Perl code - (2007-06-06)
  [1235] Outputting numbers as words - MySQL with Perl or PHP - (2007-06-17)
  [1391] Ordnance Survey Grid Reference to Latitude / Longitude - (2007-10-14)
  [1863] About dieing and exiting in Perl - (2008-11-01)
  [1865] Debugging and Data::Dumper in Perl - (2008-11-02)
  [2229] Do not re-invent the wheel - use a Perl module - (2009-06-11)
  [2234] Loading external code into Perl from a nonstandard directory - (2009-06-12)
  [2427] Operator overloading - redefining addition and other Perl tricks - (2009-09-27)
  [2931] Syncronise - software, trains, and buses. Please! - (2010-08-22)
  [3009] Expect in Perl - a short explanation and a practical example - (2010-10-22)
  [3101] The week before Christmas - (2010-12-23)
  [3377] What do I mean when I add things in Perl? - (2011-08-02)

P210 - Perl - Topicalization and Special Variables
  [493] Running a Perl script within a PHP page - (2005-11-12)
  [639] Progress bars and other dynamic reports - (2006-03-09)
  [969] Perl - $_ and @_ - (2006-12-07)
  [1136] Buffering output - why it is done and issues raised in Tcl, Perl, Python and PHP - (2007-04-06)
  [1221] Bathtubs and pecking birds - (2007-06-07)
  [1232] Bathtub example - (2007-06-14)
  [1289] Pure Perl - (2007-08-03)
  [1508] How not to write Perl? - (2008-01-15)
  [1704] Finding operating system settings in Perl - (2008-07-10)
  [1705] Environment variables in Perl / use Env - (2008-07-11)
  [1728] A short Perl example - (2008-07-30)
  [1829] Dont bother to write a Perl program - (2008-10-10)
  [1860] Seven new intermediate Perl examples - (2008-10-30)
  [1922] Flurinci knows Raby Lae PHP and Jeve - (2008-12-04)
  [2833] Fresh Perl Teaching Examples - part 2 of 3 - (2010-06-27)
  [2876] Different perl examples - some corners I rarely explore - (2010-07-18)
  [2972] Some more advanced Perl examples from a recent course - (2010-09-27)
  [3449] Apache Internal Dummy Connection - what is it and what should I do with it? - (2011-09-19)
  [4301] Perl - still a very effective language indeed for extracting and reporting - (2014-09-20)
  [4395] Preparing data through a little bit of Perl - (2015-01-15)
  [4682] One line scripts - Awk, Perl and Ruby - (2016-05-20)
  [4700] Obfurscated code - it might work, but is it maintainable? - (2016-07-02)


Back to
Christmas is coming very early
Previous and next
or
Horse's mouth home
Forward to
Looking after you Christmas Customer Crowds
Some other Articles
Question on division (Java) - Also Perl, PHP, Python ...
Refa Tandoori Indian Restaurant, Melksham
An answer to a student asking 'Help'
Looking after you Christmas Customer Crowds
Using English can slow you right down!
Christmas is coming very early
Reading a file multiple times - file pointers
On cancellations, rebooking, and pricing schemes
Useful command or messy screen?
Linux / Unix - layout of operating system files
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., 2024: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.info/mouth/1444_Usi ... down-.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb