Whenever you do an equality check in a Perl program, you must think whether you're checking if two numbers are equal, if two test strings are equal, or if a string looks like a pattern. And you write different code in each case:
Checking numbers:
If ($stuff == 6) { ...
Tests whether $stuff contains the number 6 (or a string that evaluates to the number 6, or the number 6.0)
Checking text string equality:
If ($stuff eq "Well House") { ...
Tests whether $stuff contains exactly the string "Well House"
Checking a text string against a pattern:
If ($stuff =~ /hotel/i) { ...
Tests whether the string in $stuff contains, somewhere within it, the word "hotel" in upper case, lower case, or a mixture.
You need to be especially careful not to use the
== (numeric) operator to check text strings, as text strings that do not start with digits return zero - so (for example) it would always tell you that two names are the same!
Here's an example to illustrate that:
print "What is your name? ";
chop($hes = <STDIN>);
# Numeric equality
if ($hes == "Graham") {
print "Hello and welcome\n";
} else {
print "Not known\n";
}
# String equality - EXACT match!
if ($hes eq "Graham") {
print "Hello and welcome\n";
} else {
print "Not known\n";
}
# String match to regular expression
if ($hes =~ /Graham/) {
print "Hello and welcome\n";
} else {
print "Not known\n";
}
And some results from testing it:
Dorothy:cs2 grahamellis$ perl u
What is your name? Graham
Hello and welcome
Hello and welcome
Hello and welcome
Dorothy:cs2 grahamellis$ perl u
What is your name? I am Graham Ellis
Hello and welcome
Not known
Hello and welcome
Dorothy:cs2 grahamellis$ perl u
What is your name? Simon Smith
Hello and welcome Test zero against zero
Not known
Not known
Dorothy:cs2 grahamellis$
(written 2008-07-29)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
P212 - Perl - More on Character Strings [453] Commenting Perl regular expressions - (2005-09-30)
[583] Remember to process blank lines - (2006-01-31)
[586] Perl Regular Expressions - finding the position and length of the match - (2006-02-02)
[597] Storing a regular expression in a perl variable - (2006-02-09)
[608] Don't expose your regular expressions - (2006-02-15)
[737] Coloured text in a terminal from Perl - (2006-05-29)
[928] C++ and Perl - why did they do it THAT way? - (2006-11-16)
[943] Matching within multiline strings, and ignoring case in regular expressions - (2006-11-25)
[1222] Perl, the substitute operator s - (2007-06-08)
[1230] Commenting a Perl Regular Expression - (2007-06-12)
[1251] Substitute operator / modifiers in Perl - (2007-06-28)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1336] Ignore case in Regular Expression - (2007-09-08)
[1510] Handling Binary data (.gif file example) in Perl - (2008-01-17)
[1735] Finding words and work boundaries (MySQL, Perl, PHP) - (2008-08-03)
[1947] Perl substitute - the e modifier - (2008-12-16)
[2230] Running a piece of code is like drinking a pint of beer - (2009-06-11)
[2379] Making variables persistant, pretending a database is a variable and other Perl tricks - (2009-08-27)
[2657] Want to do a big batch edit? Nothing beats Perl! - (2010-03-01)
[2801] Binary data handling with unpack in Perl - (2010-06-10)
[2834] Teaching examples in Perl - third and final part - (2010-06-27)
[2874] Unpacking a Perl string into a list - (2010-07-16)
[2877] Further more advanced Perl examples - (2010-07-19)
[2993] Arrays v Lists - what is the difference, why use one or the other - (2010-10-10)
[3059] Object Orientation in an hour and other Perl Lectures - (2010-11-18)
[3100] Looking ahead and behind in Regular Expressions - double matching - (2010-12-23)
[3322] How much has Perl (and other languages) changed? - (2011-06-10)
[3332] DNA to Amino Acid - a sample Perl script - (2011-06-24)
[3411] Single and double quotes strings in Perl - what is the difference? - (2011-08-30)
[3546] The difference between dot (a.k.a. full stop, period) and comma in Perl - (2011-12-09)
[3630] Serialsing and unserialising data for storage and transfer in Perl - (2012-02-28)
[3650] Possessive Regular Expression Matching - Perl, Objective C and some other languages - (2012-03-12)
[3707] Converting codons via Amino Acids to Proteins in Perl - (2012-04-25)
[3927] First match or all matches? Perl Regular Expressions - (2012-11-19)
[4452] Binary data handling - Python and Perl - (2015-03-09)
P204 - Perl - Conditionals and Loops [353] Wimbledon Neck - (2005-06-20)
[930] -> , >= and => in Perl - (2006-11-18)
[1191] Smart English Output - via PHP and Perl ? : operator - (2007-05-18)
[1468] Lexical v Arithemetic testing, Bash and Perl - (2007-12-11)
[1477] Decisions - small ones, or big ones? - (2007-12-18)
[1607] Learning to program in Perl - (2008-04-11)
[1696] Saying NOT in Perl, PHP, Python, Lua ... - (2008-07-04)
[2351] Ternary operators alternatives - Perl and Lua lazy operators - (2009-08-12)
[2550] Do not copy and paste code - there are much better ways - (2009-12-26)
[2711] For loop - checked once, or evety time? Ruby v Perl comparison and contrast - (2010-04-07)
[2832] Are you learning Perl? Some more examples for you! - (2010-06-27)
[3004] Increment operators for counting - Perl, PHP, C and others - (2010-10-18)
[3397] Does a for loop evaluate its end condition once, or on every iteration? - (2011-08-18)
[3895] Flowchart to program - learning to program with Well House - (2012-10-14)
[4031] Showing what programming errors look like - web site pitfall - (2013-03-06)
[4322] Learning to Program - the conditional statement (if) - (2014-11-21)
[4323] Learning to program - Loop statements such as while - (2014-11-22)
Some other Articles
Apache httpd, MySQL, PHP - installation procedurePunting on the CamBack from the futureA short Perl exampleEquality and looks like tests - PerlHot Courses - PerlA future vision for Melkshamaddslashes v mysql_real_escape_string in PHPBath - Melksham - Devizes. Bus route changes, new timetablePHP examples - source code and try it out too