So so far we know the following:
A variable is a placeholder for any string (of characters) or numbers.
Like so:
my $dog = 'rover';
or
my $number = 5;
my @array_of_animals = ( 'Dog', 'cat', 'horse', 'mouse', 'sheep', 'cow');
And a Hash or associative array, is a list of strings indexed by whatever
keys you choose to give it.
eg:
my %weekdays = ( "Sun" => "Sunday", "Mon" => "Monday", "Tue" => "Tuesday", "Wed" => "Wednesday", "Thu" => "Thursday", "Fri" => "Friday", "Sat" => "Saturday", );
So we have our data placeholders, now we need to know what to do with them..
The most common flow control in a Perl program (or any other lanuguage for that matter)
is the if/elsif/else conditional statements.
This allows you to set a series of conditions and based on the values of variables or
some other testable condition, you can direct the way the program acts.
Here is an example of an if/elsif/else statement in use within a simple program.
(Incidently, elsif is not a typo, thats really how they spell it in Perl).
#!/usr/bin/perl use CGI::Carp qw(fatalsToBrowser); use strict; use warnings; use diagnostics; # Now tell the server to send html to the browser: print "Content-type: text/html\n\n"; # Set the $animal variable to whatever you # Want to see the flow of the program. my $animal = 'dog'; # an if statement: if ($animal eq 'dog') { print "Your animal is a: \"$animal\"<br />\n"; print 'Woof Woof !!!!'; } # elsif statement allows you do test for a # different condition. elsif ($animal eq 'cat') { print "Your animal is a: \"$animal\"<br />\n"; print 'Here pus,pus,pus,pus'; } # you can have as many elsif statements as # you like. elsif ($animal eq 'horse') { print "Your animal is a: \"$animal\"<br />\n"; print 'Hello mr Ed!!!'; } # Else statement catches anything that # didn't match the first conditions. else { print "I have no idea what an \" $animal \" is<br />\n"; print 'Sorry I can\'t be of more help.'; }
Later, I will show you how to use cgi to ask the user what their animal is
instead of having it fixed in the code as dog like it is now.
(The line that is setting it fixed as dog now is: my $animal = 'dog';)
This little program introduces allot of new stuff.
firstly, notice the \n near the end of each line?? that is the symbolic meaning of
"newline" which means Perl is bacically pressing return everywhere you see
the \n. in this case, it will stop the source in your browser from being all
on one line.. but since we know that HTML doesn't care if the source is on
one line or not when it comes time to render, we have to use
<br /> to get the browser to go to the next line when showing the
HTML. (or <p> or whatever HTML you like...)
Next thing, notice that sometimes I have used double quotes around statements,
and other times single quotes?
Thats very observant of you. :-). There is a good reason for that, and its
called interpolation.
Single quotes are the default, you should always use single quotes unless
there is a reason not to..
In one of the examples above, you see this : print "you animal is a:
\"$animal\"<br />\n"; I used double quotes because I want the variable
$animals in that line to be replaced with the value of $animals set at the
top of the script, if I had used single quotes, it would have left $animal
as exactly that, $animal, instead of dog, (or cat, or horse etc..)
(also notice the \" before and after the $animal, Since I want those dbl
commas to be displayed and not interpreted by Perl, I tell Perl to ignore
them by putting a \ in front of them. (the same way that putting a \ in
front of n turns it from the character n into a newline.))
The reason single quotes are the default, is for a couple of very good
reasons.
1. If you don't have to do any interpolation, then why make Perl work harder
looking for it? (if you put it in double quotes, Perl will go looking for
things to replace (otherwise known as interpolating variables).)
2. Using single quotes means you don't have to excape characters you
otherwise would have to. (I'll explain more on that later, but really, the
only thing you have to escape when using single quotes, is a single quote
itself.. (like in the second last line in the word "can't" otherwise Perl
would assume that line was 'Sorry I can' and then generate an error when if
tried to work out what: t be of more help.' was, (because it only one
single quote, its not enclosed by quotes...)
Lastly, we will cover the if/elsif/else statements thenselves.
if (In here goes a test of some sort) { # Do something if the above test is true. } elsif (The first test wasn't true, so try this new test) { # Do something here if the second test returned true. } else { # Do this is neither of the above tests returned true. }
Thats pretty basic, so I don't think it requires much explanation...
one
last thing I just noticed that I should mention..
You may have noticed up the top of that script I said:
$animal = 'dog';
And then in the if statements, I tested by using eq instead of = ???
There is a good reason for that, if I had tested by saying
if ($animal = 'dog')
I'd have just set the variable $animal to equal dog, which is not
what I wanted to do at all (we were testing the value, not setting it).
Incidently, we do use = for testing variable values, but we only use it with numeric values and
then we use two equals signs not one. (as shown above) If we only used one,
we'd be changing the value rather than testing it.
eg:
# These will always return true. # because you've set $animal equal to dog, # or $mynum equal to 3 # and a successful assignation will return true. if ($animal = 'dog') if ($mynum = 3)
So the correct way to do these if tests, is like so:
# Both correct tests of string and numeric values.. # Test of string value if ($animal eq 'dog') # Test of numeric value if ($mynum == 3)
These are not the only program flow controls that Perl has available, there is also:
unless (some test statement)
{
# Do whatever is here "unless" the above statement is true.
}
There are also for/foreach loops, and "while" conditionals as well, all of which will be discussed
in future tutorials.
As you see examples of these in practise, it will all start to make sense and fit together and you
will find yourself wondering why it seemed confusing when you started.
(assuming that you currently
find it alittle confusing :-).
So if you are ready to learn more:
Back to the Tutorial Index