Day 1 - Training
Download
Report
Transcript Day 1 - Training
Perl
Day 1
Programming
Computers know how to execute a sequence of
instructions
– Instructions must be very precise.
– Think of a recipe
Preheat oven to 400F
Place 1 cup sugar and 1 cup butter into a bowl
Blend until creamy with a high speed mixer
Add in 1 medium sized egg, 2 cups flour, and 1 teaspoon
baking soda, ½ spoon salt
Cut into circular shaped cookies 2” in diamater, place on a
greased cookie sheet
Bake in preheated oven for 6.5 minutes.
Programming Language
Computers ultimately speak 1’s and 0’s, but we aren’t good at
entering long strings of them.
– Thus people came up with higher level languages to send instructions
to the CPU
This is called Machine or Assembler language
– That language is hard to understand, so later people developed higher
level languages that are closer to English, which “compile” into
assembler language
C, C++ are good examples of this
These languages are compiled for a specific processor (Intel/AMD, vs
PowerPC vs. Spark). Thus a program compiled on an Intel processor won’t
work on a PowerPC (Mac).
– To get around this, people developed interpreted languages which have
“interpreters” that are compiled for each platform, that run a even
higher level language.
The cost to this is speed
The advantage is portability of code, code written once will execute on Mac,
Windows, Unix etc.
Where to get perl
Most Unix machines have it built in.
– This includes scooby and scooby2 if you have
accounts there.
For windows and mac:
– http://www.activestate.com/activeperl/
You’ll use notepad, vi or some other TEXT
editor to write your scripts.
– There are also many IDEs you can use, but I’ll
leave that up to you to research.
She bangs, she bangs…
All perl programs start with a line called a
shabang.
#!C:/perl/bin/perl.exe
If you are on Unix:
#!/usr/bin/perl
Every line should end in a ;
If you wish to put a comment in your script,
simply start the comment with a #:
#This is a comment
Having the script talk to you
print
print(“hello world\n”);
\n
– All lines that are printed should end with a \n
inside the quotes. This is to tell perl that you
want a “new line” (same as hitting enter).
If you forget to put the \n, sometimes it won’t
print at all.
What is a variable
Think of a variable as a bucket into which you can place
something.
– You can have an unlimited number of buckets. To create a
bucket you simply use it.
– Buckets have names which must be unique.
They are case sensitive so “a” is different from “A”
– Buckets should be named so you can tell what’s in them. This
will make your life easier and is mandatory as far as I’m
concerned.
In Perl variable names are always named $[something],
@[something], or %[something]
– $ signifies a Scalar
– @ signifies an Array
– % signifies a Hash
e.g $a, $b, $enda, $this_is_long, $ThisIsLong
Double Quotes – Double the fun
Anytime in perl you use “ “ whatever is
inside the quotes will be interpreted.
Anytime you use ‘ ‘ whatever is inside the
quotes will be used literly.
print(“$x \n”);
This will output the value of $x
print(‘$x \n’);
This will output $x \n
Scalars
A scalar is a variable which holds exactly 1
value.
– It usually contains:
a number,
a letter (character),
a set of characters (string)
e.g.
$NumStudentsInClass=12;
$ClassName=“Learning Perl”;
Buckets of fun
Now that you have a scaler, you can do
things with it like print it out:
print(“There are $NumStudentsInClass people in this class\n”);
Math
If a scalar contains a number, you can do
math:
$NumA=7;
$NumB=10;
$Num=$NumA+$NumB;
Print(“$NumA + $NumB = $Num\n”);
Operators include: +, -, / (divide) and *
(multiply)
Text
If your scalar has characters or a string in it, you add
additional text with the . operator:
$Word1=‘Hello’;
$Word2=‘World’;
$Words=$Word1.’ ‘.$Word2;
*or*
$Words=“$Word1 $Word2”;
You can add additional text to an existing scalar:
$a = ‘Hello’;
$a .= ‘ World’;
print(“$a\n”); #This prints “hello world”
Conditionals
Sometimes you only want to do things if a
scalar contains a certain value:
$Num=105;
if($Num==105)
{
print(“Big Number!\n”);
}
Tests
If’s can have the following tests:
== (checks if numbers are equal)
< (checks if numbers are less than)
> (checks if numbers are greater than)
<= (checks if numbers are less than or equal)
>= (checks if numbers are greater than or equal)
!= (checks if numbers are not equal)
eq (checks if characters/strings are identical)
ne (checks if characters/strings are not identical)
Maybe we need 2 tests
We can combine tests with and/or
– AND: &&
– OR: ||
$Num=100;
if(($Num>10) && ($Num<100))
{
print(“Our numbers is between 10 and 100\n”);
}
$Name=“Enda”;
$HeightInFeet=6;
if(($Name eq “Enda”) || ($Height>5))
{
print(“It’s either Enda, or a tall person\n”);
}
What if we want to do one thing if something is
true, and something else otherwise?
Each if can have unlimited number of elsif, and up to 1 else:
$Month=3;
if($Month==1)
{ print(“Jan\n”); }
elsif($Month==2)
{ print(“Feb\n”); }
elsif($Month==3)
{ print(“Mar\n”); }
…
elsif($Month==12)
{ print(“Dec\n”); }
else
{ print(“Error: Month should be between 1 and 12\n”); }
Additional thing you can check
Does this variable exist?
if(defined($a))
What if you want something to happen if
something is NOT true
if(! (defined($a)))
More than one thing in a variable
Crazy talk?
– No, one way to do this is called an Array.
@a=(1,2,3);
– There is no restriction on what the values in the array can be,
one could be a number, the next a string, the next a number etc.
– When you refer to the entire array you use @ instead of $
– Arrays are indexed from 0, so the first element in the array is
said to be at “index” 0. The second element is said to be at
“index” 1.
– When you refer to an individual scalar in the array, you use $
again
– e.g.
@b=@a;
print(“$a[0]\n”);
How many things are in the array?
You can find out by assigning the Array to
a scalar
– Yes, that doesn’t make sense, it’s a weird perl
thing:
@Months=(‘jan’,’feb’,’mar’,’apr’,’may’,’jun’,’jul’,
’aug’,’sep’,’oct’,’nov’,’dec’);
$NumMonths=@Months;
print(“There are $NumMonths months\n”);
Command Line
Let’s assume you wrote a Perl Script in a file called
doit.pl
You typically execute it like this:
– C:\perl\bin\perl doit.pl
What if you want to pass “arguments” into your script:
– C:\perl\bin\perl doit.pl 1 2 Enda
– Those arguments are automatically stored in an Array called
@ARGV
Assuming the above command line:
–
–
–
–
@ARGV=(1,2,’Enda’);
$ARGV[0] now contains 1
$ARGV[1] now contains 2
$ARGV[2] now contains ‘Enda’
Doh!
Often you want to ensure that you got at least
1 argument to your script.
–
–
If not there may be no reason to continue.
For example, imagine a script that takes one
argument, which should be a number less than 5.
It prints out the numbers before that number.
Sometime there is just no point in continuing,
you should just die:
–
die “I asked you to send me a number, you gave me
$ARGV[0]…I can do nothing with that…giving up”;
count.pl
#!C:/Perl/bin/perl.exe
$NumArguments=@ARGV;
If($NumArguments<1)
{ die “Usage: count.pl NUMBER”; }
If($ARGV[0]==5)
{ print(“1 2 3 4 5\n”); }
elsif($ARGV[0]==4)
{ print(“1 2 3 4\n”); }
elsif($ARGV[0]==3)
{ print(“1 2 3\n”); }
elsif($ARGV[0]==2)
{ print(“1 2\n”); }
elsif($ARGV[0]==1)
{ print(“1\n”); }
else
{ die “Error, you must send me a number between 1 and 5 as the first
argument”; }