Table of Contents

Replacing with what was found


We start with capturing whatever the \W matches, using parens. Then, we add it to the replacement string. The capture is of course in $1 , but as it is in a regex we refer to it as \1 .

The final problem is of course capitalising the replacement string when appropriate. Which in old versions of the tutorial I left as an exercise to the reader, having run out of motivation. A reader by the name of Paul Trafford duly solved the problem, and I have just inserted his excellent explanation for the elucidation of all concerned:

#         Solution to the us/them problem...
#   The program works through the text assigning the 
#   variable $1 to 'U' or 'u' for any words where this 
#   letter is followed by 's' and then by non 'word' 
#   characters.   The latter is assigned to variable $2.
#   For each such matching occurrence, $1 is replaced by 
#   the letter that precedes it in the alphabet using 
#   operations 'ord' and 'chr' that return the ASCII value 
#   of a character and the character corresponding to a 
#   given natural number.  After this 'hem' is tacked on 
#   followed by $2, to retain the shape of the original 
#   sentence.  The '/e' switch is used for evaluation.
#   1. This solution will not replace US (short for 
#   United States) with Them or them.
#   2. If a 'magical' decrement operator '--' existed for 
#   strings then the solution could be simplified for we 
#   wouldn't need to use the 'chr' and 'ord' operators.
$_='Us ? The bus usually waits for us, unless the driver forgets us.';

print "$_\n";


print "$_\n";

An excellent solution, thanks Paul.

There are several more constructs. We'll take a quick look at \d which means anything that is a digit, that is 0-9 . First we'll use the negated form, \D , which is anything except 0-9 :

print "Enter a number :";
chop ($input=<STDIN>);

if ($input=~/\D/) {
        print "Not a number !!!!\n";
} else {
        print 'Your answer is ',$input x 3,"\n";


this checks that there are no non-number characters in $x . It's not perfect because it'll choke on decimal points, but it's just an example. Writing your own number-checker is actually quite difficult, but it is an interesting exercise. Try it, and see how accurate yours is.