An Introduction to Perl March 2001 Hesham Wahby
An Introduction to Perl March 2001 Hesham Wahby Mentor Graphics Egypt
Presentation Outline ➢ Introduction ➢ Hello world ➢ Basic Perl language ➢ Regular expressions ➢ Some common Perl functions ➢ A glimpse of some advanced features ➢ Conclusion
Introduction: What is Perl? ➢ Practical Extraction and Report Language. ➢ Created in 1987 by Larry Wall, now maintained by hundreds of people. ➢ A high-level programming/scripting language, combining features from C, Sed, Awk, Unix shells and many others. ➢ Originally designed for text (and binary) string processing. ➢ "Perl is designed to make the easy jobs easy and the hard jobs possible. " ➢ Perl motto: "There's more than one way to do it. "
Introduction: Features of Perl ➢ Language features: ➢ Simple to start using. Very rich set of tools. ➢ Basically function oriented, with OO extensions. ➢ C-style program structure. Free-style command syntax. ➢ Weakly-typed variables. Implicit declaration. Sophisticated data structures. ➢ Built-in regular expressions. ➢ Built-in database access. ➢ POSIX compliant.
Introduction: Features of Perl ➢ Compiler features: ➢ Compiled at load-time. ➢ Can be translated to optimized C code. ➢ Can also be directly integrated with other C/C++ code by either calling it or getting called by it. ➢ Built-in debugger.
Introduction: Getting Perl ➢ Perl is GPL: freely distributable, open-source. ➢ Where to get Perl: ➢ The Perl Homepage: ➢ http: //www. perl. com/ CPAN (Comprehensive Perl Archive Network): ➢ http: //www. cpan. org/ Active. Perl Homepage (for Win 32): http: //www. activestate. com/Active. Perl/
Hello world! ➢ Example Perl program: "hello. pl": #!/usr/mgc/bin/perl print "Hello world! " ➢ Command line: > perl hello. pl Hello world! > ➢ To run as executable: > chmod +x hello. pl >. /hello. pl
Hello world: Command-line options > perl [options] program. pl program_arguments > perl -e '$x=7; print 23*$x; print "n"' > preprocess test. pl | perl > perl -h > perl -v > perl -w program. pl > perl -d program. pl > perl -c program. pl > perl -Ipath_for_modules program. pl > perl -Mmodule_name program. pl
Hello world: A more extensive example #!/usr/mgc/bin/perl %types = (int => 'Integers', float => 'Reals'); open INFILE, $ARGV[0]; @lines = <INFILE>; close INFILE; # Search for variables foreach (@lines) { if (/^s*(int|float)s*(w*)/) { push @list[$1], $2; } } $" = ', '; # Print them out foreach $type (keys %list) { print "$types[$type]: @list[$type]. n" }
Basic Perl language: Data types ➢ Scalars $var ➢ Lists (Arrays) @var $var[n] ➢ Hashes (Associative arrays) %var $var[? ? ? ] ➢ Complex data structures
Basic Perl language: Special variables Default argument: ➢ Input record separator: ➢ Output field separator: ➢ List separator: ➢ Process Id: ➢ Program name: ➢ Command-line arguments: ➢ Subroutine arguments: ➢ Environment variables: ➢ $_ $/ $, $" $$ $0 @ARGV @_ %ENV
Basic Perl language: Context $a = 'Take'; $x = 2; $y = '007'; @list = ('red', 'green', 'blue'); print $a. ' '. $x; $b = "Take $xn"; $z = $x + $y; $c = "$x + $y"; print "@list", @list, $#list; $i = @list; print $i; print $list[2]; print $list; $list. Len = ("purple", @list, 'yellow', @list+2); $, = "n"; print %ENV; print (keys %ENV); print (values %ENV);
Basic Perl Language: Control constructs if (expression) {block} else {block} if (expression) {block} elsif (expression) {block}. . . else {block} unless (expression) {block} else {block}
Basic Perl Language: Control constructs while (expression) {block} continue {block} do {block} while (expression); until (expression) {block} for (statement; expression; statement) {block} foreach variable (list) {block} label: goto label;
Basic Perl language: File-handling ➢ Opening a file: open ➢ FILE, $file #input FILE, "<$file"; #input (FILE, ">$file"); #output FILE, ">>$file"; #append Closing a file: close FILE; ➢ Reading from a file: $line = <FILE>; @lines = <FILE>; read FILE, $data, 78, 10; ➢ Writing to a file: print FILE "String. n"; ➢ Binary files: binmode FILE; ➢ Reading output of a command-line: $output = `ls -l $dir`
Basic Perl language: Subroutines sub Add { local ($x, $sum); $sum = 0; foreach $x (@_) { $sum += $x; } $sum; } $test = &Add (2, $number, @listofnumbers);
Regular expressions: Pattern matching $str = "The large swirls are eddies in the Gulf. "; $str =~ m/die/ ; #true $str =~ /gulf/ ; #false $str !~ /gulf/i ; #false $_ = $str; /^the/ ; #false ➢ Modifiers: g: i: m: o: s: x: match globally case-insensitive matching multi-line compile once single-line extended RE
Regular expressions: Basic elements . ^ $ b B Quote next metacharacter Any character Start of line End of line (Non-)Word boundary w W s S d D (Non-)Word character (Non-)Whitespace (Non-)Digit t n Tab Newline $var ${var} Match contents of variable To explicitly delimit variables
Regular expressions: Basic elements | () [] [^] Alternation Grouping Character class Negative character class * + ? {n} {n, m} Match Match *? ? ? +? 0 or more 1 or 0 exectly n n or more, but less than m {}? Reverse 'greedy' behaviour
Regular expressions: Extracting matched patterns if ($match = ($string =~ /d+/)) { print $match } ($a, $b) = /(w)s(w)/; @mygroups = (`groups` =~ /b(w+)b/g); /setenvs*(w+)/; $vars{ nmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmm /mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm /$1} = $2;
Regular expressions: Substitution and translation ➢ Substitution: $str =~ s/green/blue/g; s/b(. )(. *)(. )b/321/g; s/(d+)/1 + $1/eg; ➢ Translation: tr/abc/ABC/; tr/A-Z/QWERTYUIOPASDFGHJKLZXCVBNM/;
Regular expressions: Some example REs //s*0*. 0*/ ; /[a-z]['")]*[. !? ]+['")]*s/ ; s|/usr/bin|/usr/local/bin| ; $count = s/Misterb/Mr. /g ; s/d+/$&*2/eg ; s/($w+)/$1/eeg ; $program =~ s { /* # Match opening delimiter. . *? # Match minimal characters. */ # Match closing delimiter. } []gsx;
Some common Perl functions: Strings ➢ length $l = length $string; $l = length; #uses $_ ➢ split @list = split /[, s]/, $string, 10; ($name, $value) = split /=/; ➢ substr $piece = substr $string, 2, 10; ➢ chop & chomp $c = chop $string; chomp @lines; $/ = ' '; chomp; ➢ pack & unpack
Some common Perl functions: Lists ➢ push & pop push @list, $item; $num = push @list, @items; $item = pop @list; ➢ shift & unshift $item = shift @list; unshift @list, $item; ➢ sort @sorted = sort @list; print sort {$a <=> $b} @list; ➢ splice @sublist = splice @list, 2, 5; splice @list, $off, $len, @newitems;
Some common Perl functions: Miscellaneous ➢ time & localtime ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime; $now = localtime; # "Thu Oct 13 04: 54: 34 1994" ➢ rand & srand time; $x = rand 10;
A glimpse of some advanced features ➢ References and complex data structures ➢ Formats ➢ POD: plain old documentation ➢ Modules ➢ Perl/Tk and Perl/CGI ➢ Databases ➢ OO Perl
Conclusion: When to use Perl ➢ Advanced "shell scripts". ➢ Process management. ➢ Writing quick routines to batch process files or access databases. ➢ Anything involving a lot of string handling (ASCII or binary). ➢ CGI and other web-programming.
Conclusion: When not to use Perl ➢ Heavy computations. ➢ Large applications.
Conclusion: Further resources ➢ Books: ➢ "Programming Perl" 2/e, Larry Wall, Tom Christiansen & Randal Schwartz. (The camel book. ) ➢ "Learning Perl" 2/e, Randal Schwartz, Tom Christiansen & Larry Wall. (The llama book. ) ➢ "Perl in a Nutshell", Ellen Siever, Stephen Spainhour & Nathan Patwardhan. ➢ "Advanced Perl Programming", Sriram Srinivasan.
Conclusion: Further resources ➢ Web-sites: ➢ Perl Core Documentation: http: //www. perldoc. com/ ➢ Nik Silver's Perl Tutorial: http: //www. comp. leeds. ac. uk/nik/start. html
- Slides: 30