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”; }