Top Banner
Getting Started with Perl Jeffrey ROACH 28 November
24

Getting Started with Perl Jeffrey ROACH 28 November.

Dec 31, 2015

Download

Documents

Blaze Marshall
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Getting Started with Perl Jeffrey ROACH 28 November.

Getting Started with Perl

Jeffrey ROACH28 November

Page 2: Getting Started with Perl Jeffrey ROACH 28 November.

What is Perl? What is it good for?

• Perl is a scripting language• Perl is a prototyping language• Perl is designed for relatively short scripts• Perl programs are best written by a single

programmer• Perl is ideal for:– Test processing: System Administration, Back-end

web administration, Bioinformatics

Page 3: Getting Started with Perl Jeffrey ROACH 28 November.

Popularity of Perl

Page 4: Getting Started with Perl Jeffrey ROACH 28 November.

The decline of Perl

• Replaced by PHP and Python• Syntax is very different from other languages– Programming constructs programmers expect are non-

supported– Subroutines are available, but weak– Object-oriented techniques are available, but weak and

slow• Perl is not suitable for large scale, multi-developer

projects• Perl 6 has been coming next year for the last five years

Page 5: Getting Started with Perl Jeffrey ROACH 28 November.

Nevertheless

• Perl remains useful as a scripting language• Perl is installed in all Linux/Unix/Mac OS X

machines• Perl is easily installed on Windows (Active State)• Perl is free and a good place to start learning

good practice• Perl allows non-programmers to write small

programs that can do worthwhile things quickly

Page 6: Getting Started with Perl Jeffrey ROACH 28 November.

Learning Perl

• Perl is a big, messy language• Two hours is not sufficient to even crack the

surface• What we will do:– Learn seven (7) basic concepts– Use this foundation to build some small, useful (at

least a little) tools– Decide whether you want to learn more on your

own: Learning Perl The Hard Way

Page 7: Getting Started with Perl Jeffrey ROACH 28 November.

Getting Started on Kure or Killdevil

• Step 1: Get the course materialscd /netscr/<your_onyen>cp –r /netscr/roachjm/Perl .ls

• Step 2: Choose an editornano 01_helloworld.pl (OR)vi 01_helloworld.pl (OR)emacs 01_helloworld.pl

Page 8: Getting Started with Perl Jeffrey ROACH 28 November.

01_helloworld.pl

01_helloworld.pl#!/usr/bin/perl

use strict;use warnings;

print "Hello, World!\n";

print 'Hello, World';

print "<--- No New Line\n";

print 'Hello, World!\n';

print "\n";

Notes• Indicates which perl to use

– Allows ./01_helloworld.pl– Use chmod u+x <file.pl>

• Strict and warnings pretty much standard

• Note distinction between “” and ‘’

• Note the new line characer “\n”

Page 9: Getting Started with Perl Jeffrey ROACH 28 November.

02_variables.pl

02_variables.pl#!/usr/bin/perl

use strict;use warnings;

my $a = 1;print "a: $a\n";

my $b = 2;print "b: $b\n";

$b = $a + $b;print "Added a to b.\n";print "b: $b\n";…my $first_name = "Jeff";my $last_name = "ROACH";print "Full Name: $first_name $last_name\n";…

Notes• Usual start• Standard practice

• Variables hold values• Values may be numbers or

strings• Perl is pretty promiscuous

about this

Page 10: Getting Started with Perl Jeffrey ROACH 28 November.

03_arrays.pl

03_arrays.pl…my @a = (1,2,3,4,5);

print "@a\n";

print '$a[0] $a[1] $a[2] $a[3] $a[4]:';print "\t$a[0] $a[1] $a[2] $a[3] $a[4]\n";

print '$a[-1] $a[-2] $a[-3] $a[-4] $a[-5]:';print "\t$a[-1] $a[-2] $a[-3] $a[-4] $a[-5]\n";

my $len_a = scalar(@a);for (my $i=0; $i<$len_a; $i++) { print "$a[$i] ";}print "\n";…

Notes• Arrays are variables that

hold more than one value• Individual values are

indexed by an integer• Array is @a• First element is $a[0]• Arrays can store numbers

and strings• Index must always be

integer

Page 11: Getting Started with Perl Jeffrey ROACH 28 November.

04_hashes.pl

04_hashes.pl…my %a = ('one'=>1, 'two'=>2, 'three'=>3, 'four'=>4,

'five'=>5);

print "%a\n";

print '$a{\'one\'} $a{\'two\'} $a{\'three\'} $a{\'four\'} $a{\'five\'}:';

print "\t$a{'one'} $a{'two'} $a{'three'} $a{'four'} $a{'five'}\n\n";

foreach (keys %a) { print "$_ => $a{$_} ";}print "\n\n";…

Notes• Same as arrays, but with

arbitrary indices• Hash is %a• Element at ‘f’ is $a{‘f’}• Also called dictionaries,

associative arrays, maps

Page 12: Getting Started with Perl Jeffrey ROACH 28 November.

05_subs.pl

05_subs.plsub greeting { my @param = @_;

print "Hello, $param[0], how are you?\n\n";

return 0;}

print "Round 1:\n";foreach (@names) { greeting($_);}

Notes• Subroutines were the basis

for Structured Programming circa 1970 – 1975

• Natural way to break larger programs into smaller blocks

• Improves readability, code re-use, and code quality

• Perl support is somewhat underwhelming

Page 13: Getting Started with Perl Jeffrey ROACH 28 November.

06_scope.pl

06_scope.plmy @names = ('Jeff', 'Jon', 'David',

'Sam');

sub scope1 { print "In Scope1:\n"; print "\tNames: @names\n";

my @new_names = ('Ffej', 'Noj', 'Divad', 'Mas');

print "\tNew Names: @new_names\n";

}

Notes• Scope is the value that

subroutines add• Scope restricts the value that

variables take to a particular subroutine

• Essentially a context• Prevents name conflicts and

allows larger programs to be composed of smaller parts

• Hierarchical• Concept expanded in object-

oriented programming

Page 14: Getting Started with Perl Jeffrey ROACH 28 November.

07_files.pl

07_files.plsub read_file { my @params = @_;

my $filename = $params[0]; open(FILE,'<',$filename) or die $!;…}…print "\nRead File\n";read_file("File1.txt");

print "\nWrite File\n";copy_file("File1.txt","File2.txt");

Notes./07_files.pl File1.txt File2.txtdiff File1.txt File2.txtcp File1.txt File2CP.txtdiff file2.txt File2CP.txt

• Read and write from files• Fundamental importance

Page 15: Getting Started with Perl Jeffrey ROACH 28 November.

08_echo.pl

08_echo.pl#!/usr/bin/perl

use strict;use warnings;

my $argc = scalar(@ARGV);

print "@ARGV\n\n";

for (my $i=0; $i<$argc; $i++) { print "$ARGV[$i] ";}print "\n\n";

foreach (@ARGV) { print "$_ ";}print "\n";

Notes./08_echo.pl This is a testecho This is a test

• Uses @ARGV builtin array

Page 16: Getting Started with Perl Jeffrey ROACH 28 November.

09_stats.pl

09_stats.pl

my $argc = scalar(@ARGV); # You can …

print "@ARGV\n";

my $sum = 0.0;my $sumsq = 0.0;for (my $i=0; $i<$argc; $i++) { $sum = $sum + $ARGV[$i]; $sumsq = $sumsq + $ARGV[$i]*$ARGV[$i]; }

my $mean = $sum / $argc;my $stddev = sqrt(($sumsq - $sum*$sum/$argc) / ($argc - 1));

print "n: $argc\n";print "mean: $mean\n";print "stddev: $stddev\n";

Notes./09_stats.pl 1 2 3 4 5

• # denotes comments• Uses @ARGV builtin array

• Single pass standard deviation

Page 17: Getting Started with Perl Jeffrey ROACH 28 November.

10_cat.pl

10_cat.plsub read_file { my @params = @_;

my $filename = $params[0]; open(FILE,'<',$filename) or die $!;

while (my $line = <FILE>) {print $line;

}

close(FILE); return 0;}

Notes./10_cat.pl File1.txt File2.txtcat File1.txt File2.txt

• Basic command line args• Basic file I/O

Page 18: Getting Started with Perl Jeffrey ROACH 28 November.

11_wc.pl

11_wc.plsub count_file { my @params = @_;

my $filename = $params[0]; open(FILE,'<',$filename) or die $!;

my $characters = 0; my $words = 0; my $lines = 0;

while (my $line = <FILE>) {

$characters = $characters + length($line);

my @word_array = split(' ',$line);

$words = $words + scalar(@word_array);

$lines = $lines + 1; }

close(FILE);

return "$characters $words $lines";}

Notes./11_wc.pl File1.plwc File1.pl

• Basic file I/O• Accumulator• String Split

• Character, word, line order reversed

Page 19: Getting Started with Perl Jeffrey ROACH 28 November.

12_cut.pl

12_cut.plsub cut_file { my @params = @_;

my $filename = $params[0]; open(FILE,'<',$filename) or die $!;

while (my $line = <FILE>) {

chomp($line);

my @line_array = split(',',$line);

my $column1 = $line_array[0];my $column4 = $line_array[3];

print "$column1,$column4\n"; }

close(FILE);

return 0;}

Notes./12_cut.pl File1.csvcut –d , -f 1,4 File1.csv

• Split on comma• Print selected columns

Page 20: Getting Started with Perl Jeffrey ROACH 28 November.

13_grep.pl

13_grep.pl

while (my $line = <FILE>) {

chomp($line);

if ($line =~ m/System Sleep/) {

$times = $times + 1;

my @line_array = split(' ',$line);

my $date1 = $line_array[0]; my $date2 = $line_array[1]; my $time = $line_array[2];

print "System Sleep at: $date1 $date2 $time\n";}

}

Notes./13_grep.pl File1.log

• Chomp procedure• If/then control structure• Regular expression

• Log file analysis

Page 21: Getting Started with Perl Jeffrey ROACH 28 November.

14_head.pl

14_head.plsub read_file { my @params = @_;

my $filename = $params[0]; open(FILE,'<',$filename) or die $!;

my $lines_written = 0; while ((my $line = <FILE>) and ($lines_written < 10)) {

print $line;$lines_written = $lines_written + 1;

#Not allowed with strict#if ($lines_written == 10) {# break;#}

}

close(FILE); return 0;}

Notes./14_head.pl File1.loghead File1.log

• Use of boolean and in while• Failed use of break• Common use of comments

Page 22: Getting Started with Perl Jeffrey ROACH 28 November.

15_awk.pl

15_awk.plsub hist_file { my @params = @_;

my $filename = $params[0]; open(FILE,'<',$filename) or die $!;

my %cities = ();

while (my $line = <FILE>) {

chomp($line);

my @line_array = split(',',$line);

if ($line_array[4] eq '"Active"') {

my $city = $line_array[0]; my $hours = $line_array[5];

Notes• ./15_awk.pl File2.csv

• AWK is actually is own programming

• String eq not =

Page 23: Getting Started with Perl Jeffrey ROACH 28 November.

15_awk.pl

15_awk.pl my $city_total = $cities{$city}; if ($city_total) { $cities{$city} = $city_total + $hours; } else {$cities{$city} = $hours; }}

}

close(FILE);

return %cities;}

Notes• If/Then/Else checking for

key• Returns cities hash

Page 24: Getting Started with Perl Jeffrey ROACH 28 November.

Conclusions

• Perl has tons of possibilities• Expressive: You can write things a million

different ways• Useful: You can make useful little tools relatively

easily• Organic development and prototyping• For further self-study:– Learning Perl The Hard Way

• There is also Python, Ruby, PHP, and Lua