Академический Документы
Профессиональный Документы
Культура Документы
Course Contents
1. 2. 3. 4. 5. 6. 7.
Introduction to Perl Working with scalars (numbers & strings) Operators and functions Conditions & loops Working with lists (arrays & hashes) Sub-routines Regular expressions
Contd..
8. 9. 10. 11. 12. 13.
references and complex data structures debugging in Perl Packages & Modules managing files and directories working with files and I/O handling databases in Perl
1. Introduction to Perl
Perl stands for Practical Extraction and Report Language. y Perl is a mixture of UNIX tools (sed, grep, awk etc.), Shell Scripting, C and Object Oriented features. y Perl was created by Larry Wall. It is now not owned by any single Organization. Perl is defined and maintained by a group of volunteer programmers including Larry Wall.
y
Features of Perl
1. 2. 3. 4. 5.
Perl is free Perl is both a compiled and interpreted language Perl is portable Perl can interface with other languages Perl is easy to use and debug
Perl can be downloaded from the Internet thru www.perl.org (or) www.perl.com The current version of Perl is 5.10.0. Perl is available on different platforms, Unix,Windows, MacOS etc.
Writing the first program $ vi first.pl # program to print a message print Hello, World\n ; To run the program, $ perl first.pl
display messages, print command is used perl statement must end with a ;
Every
Command Line Options To know the current version of Perl $ perl v To check the syntax errors only but does not run the script $ perl c first.pl To turn on the warnings $ perl w first.pl
Perl Online Help The online help is available in pod (plain old documentation) format and can be invoked using perldoc command. $ perldoc perlfunc $ perldoc f <command> ($ perldoc f print) $ perldoc perldoc
Data Types Perl has two types of data: 1. scalars: data consisting of a single thing ex: Numbers, Strings, References 2. lists: data consisting of a collection of single things or scalars ex: Arrays, Hashes
2. Scalars
A)
Numbers: 4 45e-4 3.2 0xbeef .234567 012 5. 1_234_456 10E2 Perl does not differentiate between integers and floats, signed or unsigned, or short and long numbers. Perl converts between the number types as needed in our scripts
Scalars
\n \t \b
Scalars \a bell sound \0nn octal \0xnn hexadecimal \l make next letter lower case \u make next letter upper case \L make all the following letters lower \U make all the following letters upper
Scalars
Converting between numbers and strings: Since, numbers and strings are scalar data, they are interchangeable. ex: 5 + 14 foo + 5 23abc + 7 gives 19 gives 5 gives 30
Scalar Variables
$a=5; $a=$b=5; $a=$b=5, $c=7; $s=abc; $t=xyz; Rules for variable names: 1.should start with a letter, underscore 2.case sensitive 3.can be up to 255 characters. We dont have to declare or initialize variables in the beginning.
Input
Reading scalar values from Keyboard: $a=<STDIN>; chomp ($a); When we enter values from the keyboard, \n is automatically attached to the input value. To remove \n from the input, we use chomp function.
Output
Displaying the values on the screen: print ($a\n); printf (%.2f\n,$b); $c=sprintf(%.2f, $b);
Operators
Relational Operators: Numeric Operators: ==, !=, <, >, <=, >= String Operators: eq, ne, lt, gt, le, ge Logical Operators: and (&&), or (||), not (!)
Operators
Assignment Operators: +=, -=,*=, /=, %=, **= Increment and Decrement Operators: ++, -Conditional Operator: exp1?exp2:exp3
Operators
Bitwise Operators: <<, >> String catenation operator: . String repetition operator: x
Operators
Quoting the strings: Single quotes: q/how are you/ Double quotes: qq/how are you/ General quotes: qw (abc);
Number Functions
abs () int () sin () cos () rand () exp () atan2 () ord () sqrt () absolute value converts to integer sine value cosine value random number e to the power of arctangent ascii number square root
String Functions
chr () index () length () reverse () rindex () substr () lc () conversion uc () conversion lcfirst () uc first() ascii character returns the pos. of chr. length reverses a scalar reverse index substring lowercase upper case first character lower first character upper
(condition) {statements}
for
for (init; test; change) { statements }
Infinite loops
while () { statements } for (;;) { statements }
$_ variable
It is the default placeholder for scalar values example foreach (`dir`) { print ($_\n); }
Creating Arrays: @nums = (1,2,3,4); @nums = (1..4); @strings = (ab , cd , ef); @strings = (a ,z); @strings = (); @combine=(@nums, @strings);
Printing the Array: print (@nums\n); print (@strings\n); print (@combine\n); Processing each element: foreach $x (@nums) { print ($x\n); }
Accessing Array elements: $nums[3]; The subscript starts from 0 to n-1 Negative Array Indexes: $nums[-1]; Negative array subscripts will count back from the end of the array.
Growing Arrays: @nums=(1..4); $nums[6]=7; Result is 1,2,3,4,undefined, undefined,7 Finding the end of the Array: $end=$#nums; Finding the length of the Array: $len=@nums;
Sorting the Array: cmp (strings), < = > (numbers) @sorted=sort {$a cmp $b} @strings; @sorted=sort {$a < = > $b} @nums; Reversing the Array: @new=reverse (@old);
push and pop functions allow you to add or remove elements from the end of the list $new=push (@nums,5); $new1=pop (@nums);
shift and unshift remove the elements from the beginning of the Array $new=shift (@nums); $new1=unshift (@nums, 10); splice removes the elements from the Array @new=splice (@nums,5,3);
slice creates pieces of the Array @array=(1..10); @slice=@array[0,1,2]; splitting the data into an Array
Creating a Hash: %hash=(key=>value, key=>value, key=>value); Ex: %pairs=(red=>255, blue=>355, green=>455); Accessing Hash Elements: $hash {$key}; Ex: $pairs {red}; Printing the Hash: print %hash; Ex: print %pairs;
Processing a Hash: foreach $key (sort keys %hash) { print $hash {$key}\n; } while (($key, $value) = each (%hash) { print $hash {$key} \n; }
Adding an element to a Hash: $hash {$key} = $value; Ex: $pairs {yellow}=555; Deleting an element from a Hash: delete ($hash {$key}); Ex: delete ($pairs {red});
Inverting a Hash: %new=reverse %hash; Ex: %newpairs = reverse %pairs; Finding the no. of keys in a Hash: $n=keys %hash; Ex: $n=keys %pairs;
6. Subroutines
The terms function and subroutine are entirely equivalent in Perl. Perl handles three types of functions. 1. Built-in: These are the functions that are defined by the standard Perl library that we can use any where in our Perl scripts.
Subroutines
Subroutines
Subroutines
Subroutines
Using local variables inside a subroutine: We can create local variables inside a subroutine using my modifier. $sum=&cal(); print The sum is $sum\n; sub cal () { my ($n1,$n2); print enter two nos. \n; chomp ($n1=<STDIN>); chomp ($n2=<STDIN>); return ($n1 + $n2);
Subroutines
Subroutines
Anonymous subroutines: These are subroutines without names and they operate sort of like pointers to functions in C.
7. REGULAR EXPRESSIONS
REGULAR EXPRESSION OPERATORS: m//, s///, tr/// @x = grep /x/, @words; PATTERN MATCHING OPERATORS: =~, !~ REs: abc exact character sequence
REGULAR EXPRESSIONS
abc at the beginning abc at the ending a or b a followed by 2,3,4 bs followed by c a followed by at least 2 bs followed by c
REGULAR EXPRESSIONS
ab*c ab+c ab?c a.c a followed by zero or more bs followed by c a followed by one or more bs followed by c a followed by optional b followed by c (abc or ac) an a followed by any single character (no newline) followed by c
REGULAR EXPRESSIONS
8. References
A reference is similar to a pointer in C. The reference itself is a scalar, it can be assigned to a scalar variable, printed, added to, passed to subroutine etc. To find out what the reference points to, we can dereference the reference. Creating a reference for a scalar: $str=This is a string; $strref=\$str;
References
Dereferencing a scalar reference: $originalstr=$$strref; Creating a reference for an Array: @array=(1..10); $arrayref=\@array; Dereferencing an array reference: @originalarray=@$arrayref; To refer to individual elements: $originalarray[0] or $$arrayref[0];
References
Creating a reference for a hash: %hash=(a=>255,b=>355,c=>455); $hashref=\%hash; Dereferencing a hash reference: %originalhash=%$hashref; To refer to individual keys: $originalhash{a} or $$hashref{a};
References
Creating a reference for a subroutine: $subref=\&mysub; Dereferencing a subroutine: $result=&$subref(3,5); Creating anonymous subroutines: $subref=sub {.}; Dereferencing a subroutine: $result=&$subref();
References
Anonymous data: The term anonymous means without a name. Anonymous data refers to data (usually arrays, hashes and subroutines) that we can only access through a reference i.e. the data does not have an associated variable name. Using anonymous data, we can create nested data structures such as, 1.Arrays of Arrays 2. Hashes of Arrays 3. Hashes of Hashes
References
Arrays of Arrays: @array= ( [0,1,2], [23,33,43], [53,54,55] ); Referring to individual elements: $array[0][1] or $array[0]->[1]
References
Hashes of Arrays: %hash= ( b=>[0,1,2], g=> [23,33,43], r=>[53,54,55] ); Referring to individual elements: $hash{b}[1] or $array{b}->[1]
References
Hashes of Hashes: %hash=(a=>{x=>0,y=>1,z=>2}, b=>{l=>3,m=>4,n=>5}, c=>{p=>53,q=>54,r=>55} ); Referring to individual elements: $hash{a}{x} or $array{a}->{x}
9. Debugging in Perl
Perl comes with a source level debugger. The debugger can help us track down subtle problems in our code. We shall see, 1. how to start and run the debugger 2. step through the execution of the script 3. trace the execution of the script 4. list the source in various ways
Debugging in Perl 5. print out the values of the variables 6. set the breakpoints To invoke the debugger, $ perl d temp.pl After the display of some messages, we see main::(temp.pl:1): system (cls); DB<1>
Debugging in Perl
DB <1>
debugger prompt with command number main package name temp.pl script name 1 line no. of the script system (cls) line in the script to be run
Debugging in Perl
Debugger Commands: n runs a line of the script, silently executes subroutines s runs a line of the script, steps into subroutines l list 10 lines after the current line list the lines before the current line x prints the value of any scalar, list
Debugging in Perl
Debugger Commands: X print out all the variables in the current package V same as X except it takes an optional name of a package r stops stepping thru the subroutine, executes rest of it, returns to the calling place. c runs the script without stepping thru
Debugging in Perl
Debugger Commands: b to set a break point S prints all the available subroutines t turns tracing on or off h help |h pause help with breaks !3 refers to the command no. 3 H -3 lists last 3 commands
Debugging in Perl
Debugger Commands: T show the stack trace w shows a window around the current line L lists all break points d deletes a break point D deletes all set break points
10.PACKAGES & MODULES What is a Package? A package is a namespace It is a space that provides its own global scope for identifiers. It functions as a private programming space. How to create Packages? We can place the code for a Package in its own file, or in multiple files, or even create several packages in the same file. To switch into another package, we use the package statement.
$ vi packages.pl package package1; BEGIN {} $x=1; sub subroutine1 { print one\n ;} return 1; END {}
$ vi prg1.pl require packages.pl; package1::subroutine1(); print $package1::x; To run, $ perl prg1.pl To know in which package we are, print __PACKAGE__;
Splitting a Package across files: $ vi file1.pl package package1; BEGIN {} sub sub1 { print hello\n; } return 1; END {}
$ vi file2.pl package package1; BEGIN {} sub sub2 { print bye\n; } return 1; END {}
$ vi original.pl require file1.pl; require file2.pl; package1::sub1(); package1::sub2(); The result is, hello bye
$ vi packages.pl package package1; BEGIN{} sub sub1 { print hello\n; } return 1 END {} package package2; BEGIN{} sub sub2 { print bye\n; } return 1; END {}
PACKAGES & MODULES Our Declaration: Our declaration sets global scope across packages, i.e. variable of one package can be accessed in another package.
$ vi packages.pl
package package1; our $data=1; sub sub1 { print hello\n; } return 1 END {}
package package2; sub sub2 { print $data\n; } return 1; END {} To run this, package1::sub1(); package2::sub2();
PACKAGES & MODULES Creating Modules: A Perl Module is just a package in which the package is defined in a file with the same name as the package and has the extension pm. This allows subroutine names automatically exported to the code when we include a Module.
$ vi Module1.pm package Module1; BEGIN { use Exporter(); @ISA=qw (Exporter); @EXPORT=qw (&subroutine1 &subroutine2); } sub subroutine1 { print hello\n ;} sub subroutine2 { print thanks\n; } return 1; END {}
$ vi final.pl use Module1; subroutine1(); subroutine2(); $ perl final.pl; CPAN:There are literally hundreds of modules that have been developed for use with Perl.
PACKAGES & MODULES Many are available with the Perl Distribution itself. CPAN (Comprehensive Perl Archive Network) serves as a repository for user developed modules. An up-to-date survey of the contents of CPAN can be found at www.perl.com However, there are two drawbacks to the CPAN modules. The first is that we have to download, build and install modules before they can be used. Some modules may require
PACKAGES & MODULES compilation which means that we need a working C compiler. Secondly, most of the CPAN modules are developed for UNIX Perl. For installing Windows specific modules, there is a special tool called ppm. C:\> ppm PRAGMAS:These are the modules that
PACKAGES & MODULES provide instructions for Perl to behave at both compile time and run time. ex: subs: allows you to pre-declare subroutine names. vars: allows you to pre-declare global variables so that they can be accepted under strict pragma.
strict: disallows bare words, global variables and symbolic references. integer: allows only integer arithmetic. constant: allows to create constant variables at compile time.
Global variable: Any variable that is not explicitly declared with my or local, automatically becomes a global variable and is available at any point in that script. Any variable declared in a block with my or local becomes a local variable to that block. Difference between my and local:
PACKAGES & MODULES A my variable is only available to the code up until the nearest enclosing block or subroutine definition. If we call another subroutine within that one, the second subroutine will not have access to those variables. Local variables declared with local are available to the code inside that block and subroutine and to the nested subroutines called from the same subroutine.
MANAGING FILES & DIRECTORIES Renaming files: rename myfile myfile.bak; Creating and following links: link file1, file2; (for hard links) symlink file1, file2; ( for soft links) # follow the link (symbolic links) if ( -l $file) { $realfile = readlink $file; }
Removing files & links: unlink temp, config, foo; Other file commands: chmod changing the file permissions chown changing the owner of the file fileno returns the file descriptor utime changes the time stamp
Directory Commands: chdir: chdir images; use Cwd; $curr=cwd(); print $curr\n; File Listing (File Globbing): @files=<*.pl>; while (<*.pl>) { print $_ ,\n; }
Directory Commands: mkdir: mkdir temp, 0777; rmdir: rmdir temp; Perl and the Environment: Perl environment variables are stored in a special hash called %ENV.
Environment Variables are commonly in upper case. To view all the Environment Variables, foreach $key (keys %ENV) { print $key -> $ENV {$key} \n; }
Creating a file:
open (FH,>myfile) or die can not create\n;
Writing to a file: print FH $input\n; Closing a file: close FH; open options: > writing < reading +> read and write
File Tests: -d -e -f -l -r -s -w
directory ? file exists ? plain file ? symbolic link ? readable ? ? Big is the file ? writable ?
File Tests: -x executable ? -z empty file ? -B binary file ? -T text file ? Command line arguments: Command line arguments are stored in a special list @ARGV.
Syntax of DBI->connect()
DBI->connect(data_source, username, password); data_source will be DBI:driver_name:driver_parameters For MYSQL at NJIT driver_name = mysql driver_parameters = database_username:sql.njit.edu username = ucid/club account name password = afs password
#!/usr/local/bin/perl use DBI; $db_handle = DBI->connect(DBI:mysql:sanskar_club:sql.njit.edu, sanskar, pswd) || die (Couldnt connect\n); $stmt_handle = $db_handle->prepare("SELECT name, email, numpeople, accomdetails FROM user_detail");
$stmt_handle ->execute;
Contd..
while (@row = $stmt_handle->fetchrow()) { foreach $field (@row){ print "$field "; } print \n; } $stmt_handle->finish(); $db_handle->disconnect();