Perl Basics with Examples

142
PERL on Unix/Linux (Practical Extraction and Reporting Language) 1 NithinKumar Singani

Transcript of Perl Basics with Examples

Page 1: Perl Basics with Examples

PERL on Unix/Linux(Practical Extraction and Reporting

Language)

1

NithinKumar Singani

Page 2: Perl Basics with Examples

Introduction

Scalar Variables and Lists

Arrays and Hashes

Operators and Precedence

Conditional statements and Loops

Regular Expressions

Subroutines

File and Directory Handling

Contents

2

Page 3: Perl Basics with Examples

History Developed by Larry Wall in 1987

Derives from the ubiquitous C programming language and to a lesser extent from sed, awk, the Unix Shell.

PERL was originally designed under Unix, but now

also runs under all OS(Including Windows).

3

Page 4: Perl Basics with Examples

IntroductionWhat is PERL? Interpreted language that is optimized for string

manipulation, I/O and system tasks.

Why PERL? Speed of development – Don't have to compile create

object file and then execute.

Power of flexibility of a high programming language.

Easy to use, freely available and portable.

Makes easy jobs easy, without making hard jobs impossible. 4

Page 5: Perl Basics with Examples

Beginning with Perl

perl –v gives the version of the Perl the user is using.

perldoc perl gives the list of manual pages as a part of every Perl installation.

perldoc –h gives the brief summary of options available.

To create a Perl program, only a text editor and the perl interpreter are required.

Perl file ends with .pl (simple.pl)

5

Page 6: Perl Basics with Examples

Beginning with Perl (Contd..)

Execution Command : perl filename.pl, or ./filename.pl

When Unix has to execute Perl Script It first looks for “#!(Shebang)” , it executes the remainder of the line and passes the name of the script to it as an argument.

“#! /usr/bin/perl” is the command used to run the Perl Interpreter.(Location of the Perl binary, which perl gives the pointer for perl binary)

So to start a script we need to add above line as the first line to make Perl script executable. 6

Page 7: Perl Basics with Examples

Beginning with Perl (Contd..)

The core of Perl is Perl Interpreter the engine that actually interprets, compiles, and runs Perl scripts.

All Perl programs go through two phases: a compile phase where the syntax is checked and

the source code, including any modules used, is converted into bytecode.

a run-time phase where the bytecode is processed into machine instructions and executed.

7

Page 8: Perl Basics with Examples

Man Pages

Man command used to read the documentation.

Command Descriptionperl Overview (top level)perldelta Changes since last versionperlfaq Frequently asked questionsperltoc Table of contents for Perl

documentationperlsyn Perl Syntaxperlop Operators and precedence perlre Perl Regular Expressionperlfunc Built in functionsperlsub Subroutinesperlvar Predefined Variables

8

Page 9: Perl Basics with Examples

Basic Syntax

“#” is used for commenting the line.

All statements should end with ”;”.

“$_” is the special variable called default variable.

Perl is case sensitive.

Perl program is compiled and run in a single operation.

9

Page 10: Perl Basics with Examples

Example#! /usr/local/bin/perl# Directs to perl interpreter on the system.

print “Welcome to perl”;# Prints a message on the output.

This Program displays:Welcome to perl

Example:#! /usr/local/bin/perl –cPrint “welcome to perl”;

This Program displays:Syntax ok

Simple Programs

10

Page 11: Perl Basics with Examples

Basic Options -c : Check syntax and exit without executing the

script.

-v : Prints the version of perl executable.

-w : Prints warnings

-e : Used to enter and execute a line of script on the command line

11

Page 12: Perl Basics with Examples

Standard Files STDIN: It is a normal input channel for the script.

STDOUT : It is an normal output channel.

STDERR : It is the normal output channel for errors.

12

Page 13: Perl Basics with Examples

Example#! /usr/local/bin/perl –wprint “Enter the Text”;$input = <STDIN> ; #Reads the input and stores in the variable inputChomp(); #will remove new line character.Print “entered text =$input” ; #Prints the input on the command line\

This Program displays:Enter the TextPerl is awesome #Perl will read this “Perl is awesome\n”, by default it will add \n character to your

entered text. So use “chomp”

entered text =Perl is awesome

Standard Files (Contd..)

13

Page 14: Perl Basics with Examples

Variables

Variables are used to refer data which is held as value. Perl defines three basic data types: scalars, arrays, and

hashes.Scalars : Holds a single value it may be a string ,number or

reference. Begin with “$”, followed by a letter then by letters,

digits or underscores.

Example : $var =1 # integer $var = “Hello_world” # string $var=2.65 # Decimal number

$3var = 123 #Error, Shouldn’t start with

#number 14

Page 15: Perl Basics with Examples

Interpolation takes place only in double quotation marks.

Example#! /usr/local/bin/perl –w$x = 12 ; #Assign the value to the variableprint ‘ Value of x is $x ’ ; #Prints the outputThis Program displays:Value of x is $x #Single quotation will not interpolate

#(no processing is done) the valuesExample#! /usr/local/bin/perl –w$x = 12 ; #Assign the value to the variableprint “Value of x is $x” ; #Prints the output This Program displays:Value of x is 12 #Double quotation interpolates the

values. #(Variable is replaced by its content )

Variable Interpolation

15

Page 16: Perl Basics with Examples

Integers Integers are usually expressed as decimal(10) but can

be specified in several different formats.

234 decimal integer0765 octal integer

0b1101 binary integer0xcae hexadecimal integer

Converting a number from one base to another base can be done using “sprintf” function.

Variables of different base can be displayed using “printf ” function

16

Page 17: Perl Basics with Examples

Example #! /usr/local/bin/perl –w $bin = 0b1010; $hex = sprint f ‘ %x’, $bin; $oct = sprint f ‘ %o’ ,45; print “binary =$bin \n hexa =$hex \n octal =$oct”;

This Program displays: binary= 1010 hexa = a octal = 55

Integers (Contd..)

17

Page 18: Perl Basics with Examples

Example#! /usr/local/bin/perl –w$x = 98 ; print f (“ Value in decimal =%d\n”, $x ) ; print f (“ Value in octal=%o\n”, $x ) ;print f (“ Value in binary =%b\n”, $x ) ;print f (“ Value in hexadecimal=%x\n”, $x ) ;

This Program displays:Value in decimal =98Value in octal =142Value in binary =1100010Value in hexadecimal =62

Integers (Contd..)

18

Page 19: Perl Basics with Examples

Escape Sequence

Description

\b Backspace\e escape\f Form feed\l Forces the next letter into lowercase\L All following letters are lower case\u Forces the next letter into upper case\U All following letters are upper case\r Carriage Return\v Vertical Tab

Escaped Sequences Character strings that are enclosed in double quotes

accept escape sequences for special characters. The escape sequences consist of a backslash (\)

followed by one or more characters

19

Page 20: Perl Basics with Examples

Built-in functions

Function Description chomp( ) The chomp() function will remove (usually) any newline

character from the end of a string. The reason we say usually is that it actually removes any character that matches the current value of $/ (the input record separator), and $/ defaults to a newline.Ex :chomp($text);

Chop( ) The chop() function will remove the last character of a string (or group of strings) regardless of what that character is.Ex:chop($text)

Chr () Returns the character represented by that number in the character setEx: chr(65 ) gives A.

Ord() Returns the ASCII numeric value of the character specified by expression.Ex:ord(‘A) gives 65.

20

Page 21: Perl Basics with Examples

List is a group of scalar used to initialize array or hash.

The elements of a list can be numbers, strings or any other types of scalar data.

Each element of the Perl lists can be accessed by a numerical index.

The elements of a list are enclosed in a pair of round parenthesis and are generally separated by commas.

Lists

21

Page 22: Perl Basics with Examples

Example :

$var = “welcome” # normal variable

$var2 = (12,24,”kacper”, $var,36.48) #first list

#first list contains 5 elements and two of are strings(‘kacper’, ’welcome’)

$var3 = (12,24,’Kacper’ ,’$var’ ,36.48) #second list

#second list contains 5 elements and two of are strings(‘kacper’, ’$var’)

Lists (Contd..)

22

Page 23: Perl Basics with Examples

Flexible way of defining list is “qw (quote word)“ operator which helps avoiding to too many quotation marks, but be cautious if white spaces are there.

Example#! /usr/local/bin/perl –wprint (“sachin” ,”dravid”, “ganguly”, “kumble” , “\n”);print qw(sachin dravid ganguly kumble”);print “\n”;print (“sachin”, “dravid” , “ganguly”, ” anil kumble” ,”\n”);print( ‘k’, ’ a’, qw(c p e r ),’t’ , ‘e’, ‘c ‘ , ‘h’ );print “\n”;

This Program displays:SachindravidgangulykumbleSachindravidgangulykumbleSachindravidgangulyanil kumbleKacpertech

Lists (Contd..)

23

Page 24: Perl Basics with Examples

Lists (Contd..) Difference between list and array(or hash) is, array is a

variable that can be initialized with a list.Range Operator Defined by symbol “..” Used to create a list from a range of letters or numbers.

Example :Print (2 .. 4 “**” a .. d )This program displays:234**abcd

24

Page 25: Perl Basics with Examples

List functions A list is joined into a string using “join “ function.Example:Print join(“ “,(“perl” ,”is” ,”a”, ”scripting” ,”language”));This program displays:Perl is a scripting language

A string is splited into a list using “split” function.Example:$var = "where-there-is a-will,there-is a-way";print split( "-", ("$var"));This program displays:wherethereis awill,thereis away

Lists (Contd..)

25

Page 26: Perl Basics with Examples

List functions (Cont..) “map” evaluates expression or block for each element

of list.Example:Print join(“, ”,(map lc, A, B, C));This program displays a, b, c

“grep” returns a sublist of a list for which a specific criterion is true.

Example:Print grep(!/x/ , a, b, x, d);This program displays:abd

Lists (Contd..)

26

Page 27: Perl Basics with Examples

Arrays An one dimensional ordered list of scalar variables.

Array provides dynamic storage for a list ,and so can be shrunk ,grown ,and manipulated by altering values.

Represented using “@(at)” symbol.

Array without a name is called a list.

Elements of an array are accessed using the index number (first element has index zero, next has one, and so on)

Each element in an array is a scalar.

“$#”array holds the last index value in the array.27

Page 28: Perl Basics with Examples

Arrays (Contd..) ( ) represents the empty list.

Example:@arr= (“perl” ,2 , 5.143 );print “ @ arr”;This program displays: perl 2 5.143 #displays all the elements

Example:@num = (1,2,3,4,5) ;print “\@num has “($#num + 1)” elements”;

This program displays@num has 5 elements #Displays (last index number i.e, 4 + 1)

which is#the length of array

28

Page 29: Perl Basics with Examples

Example#! /usr/local/bin/perl –w@a =(a .. z) ;@len1 =@a; #Assign the array to the variable@len2 =scalar (@arr); #using scalar methodPrint “ length of a =$len1 \n” ; Print “length of a =$len2”;

This Program displays:length of a = 26length of a = 26

Example#! /usr/local/bin/perl –w@arr = ( “one “ ,2 ,”three” ,4.4); $arr[2] = “kacper”; #second element(three) is

replaced byprint “@arr”; new element(kacper)

This Program displays:one 2 kacper 4.4

Arrays (Contd..)

29

Page 30: Perl Basics with Examples

Array Methodspush Push function adds a value or values to the end of an

array.Example:@num = (1,2,3,4,5) ;Push (@num , 6) ; #pushes 6 at the end of arrayPrint @num ;

This program displays:123456 #Displays all the elements of array.

pop Pop function gets a value or values from an array.Example:@num = (1,2,3,4,5) ;Pop (@num) ; #Removes the last element of an arrayPrint @num ;

This program displays:1234 #Displays all the elements of

array.30

Page 31: Perl Basics with Examples

Array Methods (Contd..)unshift unshift function adds a value or values at the start of

an array.Example:@num = (1,2,3,4,5) ;unshift (@num , 6) ; #Adds 6 at the beginning of arrayPrint @num ;

This program displays:612345 #Displays all the elements of

array.

31

Page 32: Perl Basics with Examples

Array Methods (Contd..)

shift shift function shifts off the first value of the array.Example:@num = (1,2,3,4,5) ;$x = shift(@num) ; #Shifts the first element of an arrayPrint “$x” ;

This program displays:2,3,4,5 #Displays the value stored in x.

32

Page 33: Perl Basics with Examples

Array Methods (Contd..)map Array processing method converts one array to

another.

Syntax : map Expression(or Block) , list

Runs an expression on each element of an array(like loop)

Locally assigns $_ as an alias to the current array item.Example:@small = qw( “one” ,”two”, “three”) ;@caps = map (uc ,@small); #uc returns an upper case version print ( “@val”) ;

This program displays:ONE TWO THREE #Displays in upper case 33

Page 34: Perl Basics with Examples

Array Methods (Contd..)map (Contd..)Example:@num = (65, 66,67 ,68) ;@num2 = map(2*$_ , @num); # multiplies each element by 2@char = map(chr $_ ,@num); #chr returns the character

represented by that numberprint “@num2 \n @char\n”;

This program displays:130 132 134 136A B C D

34

Page 35: Perl Basics with Examples

Array Methods (Contd..)Array Slice Array slice is a section of an array.Example:@num = (1 ,2 ,3 ,4 ,5) ;@val = @num[0 ,1]; #Array slice of first two element of @numprint join (“, ”, @val) ;

This program displays:1 ,2 #Displays first two elements of

@num.

35

Page 36: Perl Basics with Examples

Array Methods (Contd..)Array Splice Array splicing means adding elements from a list to the

array.Example:@num = (1 ,2 ,3 ,4 ,5) ;@val =(6 , 7);splice(@num,4 ,0 , @val) ; #Adds the element of @val to @numPrint join(“ ,”,@num);

This program displays:1 ,2 ,3 ,4 , 5 , 6 , 7 #Displays all the elements of @num after

#splicing.

36

Page 37: Perl Basics with Examples

Array Methods (Contd..)sort Sorts the elements in the ASCII order.

Defines the global variables $a and $b by default ,using these we can specify our own sort.

Example:@str = qw(sachin dravid ganguly kumble) ;@val =( 56,13,45,11);@str_sort 1 =sort ( @str); @val_sort1 =sort (@val); print “@str_sort 1 \n”; Print “@val_sort1 ”;

This program displays:dravid ganguly kumble sachin11 13 45 56

37

Page 38: Perl Basics with Examples

Array Methods (Contd..)sort (Contd..)Example:#!usr /local/bin/perl@str = qw(sachin dravid ganguly kumble) ;@val =( 56,13,45,11);@str_sort2 = sort{$a cmp $b}@str; #sorted in alphabetical

order@str_rev = sort{$b cmp $a}@str; # sorted in reverse

order@val_sort2 = sort{$a <=> $b}@val; # sorted in ascending

order@val_rev = sort{$b , < = > $a}@val; #sorted in descending

order print “@str_sort2 \t @str_rev\n”; print “@val_sort2 \t val_rev \n”;

This program displays:dravid ganguly kumble sachin sachin kumble ganguly

dravid11 13 45 56 56 45 13 11

38

Page 39: Perl Basics with Examples

Array Methods (Contd..)join Perl join function is used to concatenate the elements

of an array or a list into a string, using a separator given by a scalar variable value.

Syntax : $string = join (EXPR, LIST); Example:#!usr/local/bin/perl@arr = ("mukesh“ ,"anil“ ,"prem“ ,"ratan");$arr = join " \t", @arr;print "business Tycoons: $arr\n";print join "-CEO\t", @arr, "\n“;

This program displays:business Tycoons: mukesh anil prem ratanmukesh-CEO anil-CEO prem-CEO ratan-CEO

39

Page 40: Perl Basics with Examples

Array Methods (Contd..)Array Reversal Reverse function is used to reverse the elements of an

array.

Example:@num = (1 ,2 ,3 ,4 ,5) ;@rev =reverse @num ; #Reversing the elements of

@numPrint join(“ ,”, @rev) ;

This program displays: 5 ,4 ,3 ,2 ,1 #Displays all the elements of @rev.

spilt Split() function is the opposite of join function.

Syntax :LIST = split(/PATTERN/, EXPR, LIMIT)40

Page 41: Perl Basics with Examples

Array Methods (Contd..) LIST – represents a list, array or hash that is returned

by the split function

PATTERN – usually is a regular expression but could be a single character or a string

EXPR – is the string expression that will be split into an array or a list.

LIMIT is the maximum number of fields the EXPR will be split into

Example:!usr/local/bin/perl$string = “gandhi-ind-nehru-ind-sastri-ind-kalam-ind”;@colors = split('ind', $string); print @colors,"\n";

This program displays:gandhi--nehru--sastri--kalam-

41

Page 42: Perl Basics with Examples

Hashes An associative array ideal for handling attribute/value

pair.

Lists and arrays are ordered and accessed by index ,hashes are ordered and accessed by specified key.

Represented using “%” symbol.

First element in each row is called a Key and the second element is a Value associated with that key.

Example : %coins = (“quarter”,25, “dime”,5); or %coins = ( quarter => 25 , dime => 5);

Key Value42

Page 43: Perl Basics with Examples

Hashes (Contd..) Hah values can be any scalar ,just like an array ,but

hash keys can only be strings.Example: Printing the hash.#!usr/local/bin/perl%hash1 = ( one => 1 ,two => 2 ,three =>3 ,four =>4);print %hash1; #we cant use print “%hash1”;print “@{[hash1]} \n”;@temp = %hash1; Print “@temp”;

This program displays:three3one1two2four4three 3 one 1 two 2 four 4three 3 one 1 two 2 four 4

The print order determined by how the Perl chooses to store internally.

43

Page 44: Perl Basics with Examples

Hashes (Contd..) Hash can have only scalars as values.

“{ }” are used to access individual elements of the hash.

Example:#!usr/local/bin/perl%hash1 = ( one => 1 ,two => 2 ,three =>3 ,four =>4);$ele = $hash1(‘three’); #single key, use scalar @mul_ele = @hash1(‘four’ ,’one’); #multiple key ,use arrayprint “single element =$ele “;print “multiple elements =@mul_ele”;

This program displays:single element =3multiple elements = 4 1

44

Page 45: Perl Basics with Examples

Hashes (Contd..) “keys” function can be used to find the no. of keys and

list of entries in a hash.

“values ” function can be used to find the no. of values list of values in a hash.

Example:#!usr/local/bin/perl%hash1 = ( one => 1 ,two => 2 ,three =>3 ,four =>4);$ele = $hash1(‘three’); #single key, use scalar @mul_ele = @hash1(‘four’ ,’one’); #multiple key ,use arrayprint “single element =$ele “;print “multiple elements =@mul_ele”;

This program displays:single element =3multiple elements = 4 1

45

Page 46: Perl Basics with Examples

Manipulating Hashes

To add or change the value key we can do like this $hash1{ ‘three’ } = ‘PERL’ . It will overwrite the previous value if already existing.

Otherwise it is added as a new key. “undef “ function is used to remove the value of the

key, but key will still exists.Example: undef $hash1{‘ two’} ; “delete” function is used to remove the value as well as

key from the hash.Example :delete $hash1 {‘four ‘};

46

Page 47: Perl Basics with Examples

Hash Sorting

Hashes are not ordered and we must not rely on the order in which we added the hash items – Perl uses internally its own way to store the items.

We can sort hashes either by key or value ,using sort function.

Example: Sort by key%data = ( sachin => 10, dravid => 19,

dhoni => 7, rohit => 45 ); foreach $key(sort (keys(%data))) {print “\t$key \t $data{$key}”;}

This program displays:dhoni 7 dravid 19 rohit 45 sachin

10

47

Page 48: Perl Basics with Examples

Hash Sorting (contd..)

Sort function returns least (or greatest) element among all elements in the first iteration.

Example: Sort by value%data = ( sachin => 10, dravid => 19,

dhoni => 7, rohit => 45 ); foreach $key (sort{$data {$a} <= > $data{$b}} keys %data) {print “\t $key \t\t $data{$key} \n“; }

This program displays:dhoni 7 sachin 10 dravid 19 rohit

45 In the above example first values are compared(using

sort{$data {$a} <= > $data{$b}} ), found least value and that is assigned to key (using keys% data) in every iteration

48

Page 49: Perl Basics with Examples

Operators

Operators can be broadly divided into 4 types.

Unary operator which takes one operand.Example: not operator i.e. !

Binary operator which take two operandsExample: addition operator i.e. +

Ternary operator which take three operands.Example: conditional operator i.e. ?:

List operator which take list operandsExample: print operator

49

Page 50: Perl Basics with Examples

Arithmetic Operators

Operator

Description

+ Adds two numbers- Subtracts two numbers* Multiplies two numbers/ Divides two numbers++ Increments by one.(same like C)-- Decrements by one% Gives the remainder (10%2 gives five)

** Gives the power of the number.Print 2**5 ; #prints 32.

50

Page 51: Perl Basics with Examples

Shift Operators

shift operators manipulate integer values as binary numbers, shifting their bits one to the left and one to the right respectively.

Operator

Description

<< Left ShiftPrint 2 >>3 ; left shift by three positions, prints 8

>> Right ShiftPrint 42 >>2; #right shift by two positions, prints 10

x Repetition Operator. Ex: print “ hi ” x 3; Output : hihihiEx2: @array = (1, 2, 3) x 3; #array contains(1,2,3,1,2,3,1,2,3)Ex3 :@arr =(2)x80 #80 element array of value 2

51

Page 52: Perl Basics with Examples

Logical Operators Logical operators represented by either symbols or

names. These two sets are identical in operation, but have different precedence.

The “!” operator has a much higher precedence than even “&& “and “|| “.

The “not”, “and”, “or”, and “xor” operators have the lowest precedence of all Perl's operators, with “not” being the highest of the four

Operator Description && or AND Return True if operands are both True|| or OR Return True if either operand is TrueXOR Return True if only one operand is True! or NOT (Unary) Return True of operand is False

52

Page 53: Perl Basics with Examples

Bitwise Operators

Bitwise operators treat their operands as binary values and perform a logical operation between the corresponding bits of each value.

Operator Description

& Bitwise AND| Bitwise OR^ Bitwise XOR~ Bitwise NOT

53

Page 54: Perl Basics with Examples

Comparison Operators

The comparison operators are binary, returning a value based on a comparison of the expression

Operator Description < Lessthan > Greaterthan== Equality<= Lessthan or equal>= Greaterthan or equal <= > It does not return a Boolean value. It returns

-1 if left is less than right 0 if left is equal to right 1 if left is greater than right

!= Inequality operator54

Page 55: Perl Basics with Examples

Comparison Operators on strings

String Description eq Return True if operands are equal le Return True if left operand is less than right ge Return True if left operand is greater or equal to

right gt Return True if left operand is less than or equal to

right gt Return True if left operand is greater than right cmp It does not return a Boolean value. It returns

-1 if left is less than right 0 if left is equal to right 1 if left is greater than right

ne Return True if operands are not equal .(dot) Concatenation operator. It takes two strings and

joins themEx: print “System” .”Verilog”It prints SystemVerilog.

55

Page 56: Perl Basics with Examples

Binding operator

The binding operator ,=~ ,binds a scalar expression into a pattern match.

String operations like s/// ,m//,tr/// work with $_ by default.

By using these operators you can work on scalar variable other than “$_ .”

The value returned from =~ is the return value of the regular expression function, returns undef if match failed.

The !~ operator performs a logical negation of the returned value for conditional expressions, that is 1 for failure and

'' “ for success in both scalar and list contexts.56

Page 57: Perl Basics with Examples

Conditional Statements

if Statement

if keyword to execute a statement block based on the evaluation of an expression or to choose between executing one of two statement blocks based on the evaluation of an expression Example :-$firstVar = 2; if ($var == 1) { print “we are in first if \n“; } elsif( $var ==2) { print “we are in second if \n“; }else { print “we are in third if\n”; } This program displays: we are in second if

57

Page 58: Perl Basics with Examples

Conditional Statements (Contd..)

until LoopsUntil loops are used to repeat a block of statements while some condition is false.

Example :- do … until loop $firstVar = 10; do { print("inside: firstVar = $firstVar\n"); $firstVar++; } until ($firstVar < 2); print("outside: firstVar = $firstVar\n");

58

Page 59: Perl Basics with Examples

Conditional Statements (Contd..)

do-until Loops

Example :- until loop $firstVar = 10; until ($firstVar < 20) { print("inside: firstVar = $firstVar\n"); $firstVar++; }; print("outside: firstVar = $firstVar\n");

This program displays: outside: firstVar = 10

59

Page 60: Perl Basics with Examples

Conditional Statements (Contd..)

for Loops

Example : - for loops for ($firstVar = 0; $firstVar < 100; $firstVar++) { print("inside: firstVar = $firstVar\n"); }

This program will display: inside: firstVar = 0 inside: firstVar = 1 ... inside: firstVar = 98 inside: firstVar = 99

60

Page 61: Perl Basics with Examples

Conditional Statements (Contd..)

foreach LoopsThe foreach statement is used solely to iterate over the elements of an array. It is very handy for finding the largest element, printing the elements, or simply seeing if a given value is a member of an array. Example :- foreach loop @array = (1..5, 5..10); print("@array\n"); foreach (@array) { $_ = “ ** " if ($_ == 5); } print("@array\n"); This program displays: 1 2 3 4 5 5 6 7 8 9 10 1 2 3 4 ** ** 6 7 8 9 10

61

Page 62: Perl Basics with Examples

Jump Keywords

The last KeywordThe last keyword is used to exit from a statement block.

Example :- last @array = ("A".."Z"); for ($index = 0; $index < @array; $index++) { if ($array[$index] eq "T") { { last } } print("$index\n"); This program displays: 19

62

Page 63: Perl Basics with Examples

Jump Keywords (Cont..)

The next KeywordThe next keyword use to skip the rest of the statement block and start the next iteration.Example : - next keyword @array = (0..9); print("@array\n"); for ($index = 0; $index < @array; $index++) { if ($index == 3 || $index == 5) { next; } $array[$index] = "*"; } print("@array\n"); This program displays: 0 1 2 3 4 5 6 7 8 9 * * * 3 * 5 * * * *

63

Page 64: Perl Basics with Examples

Jump Keywords (Cont..)

The redo KeywordThe redo keyword causes Perl to restart the current statement block.Example :- redo print("What is your name? "); $name = <STDIN>; chop($name); if (! length($name)) { print("Msg: Zero length input. Please try again\n"); redo; } print("Thank you, " . uc($name) . "\n"); }

64

Page 65: Perl Basics with Examples

Regular Expressions

Regular expression(regexps) is simply a string that describes the pattern (example for pattern ,to find files in a directory which ends with “.sv” i.e. ls *.sv )

Used for finding and extracting patterns within the text.

The role of regexp engine is to take a search pattern and apply it to the supplied text.

The following operators use regular expressions. Matching Operator (m//) Substitution Operator(s///) Transliteration(Translation) Operator(tr///)

65

Page 66: Perl Basics with Examples

The Matching Operator (m//) The matching operator (m//) is used to find patterns in

strings. Example :#!usr/local/bin/perl$_ = “success is a progressive journey”;$var = “success is not a destination”;If( /success/) { # the initial m is optional print “String success Found”; }If ( $var =~ /destination/) { print “String destination Found”; }

This program displays: String success FoundString destination Found

66

Page 67: Perl Basics with Examples

When regular expression is enclosed in slashes(/success/), $_ is tested against the regular expression ,returning TRUE if there is a match , false otherwise

Finding multiple matchesExample :#!usr/local/bin/perl$txt =“winn-ers see ga-in, lose-rs see pa-in”while ($txt =~ m/-/g) {print “ Found another -\n” ;} This program displays: found another -found another -found another -

The Matching Operator (Contd..)

67

Page 68: Perl Basics with Examples

The Substitution Operator (s///)

The substitution operator (s///) is used to change strings.

Syntax :LVALUE =~ s/PATTERN/REPLACEMENT/

The return value of an s/// operation (in scalar and list contexts alike) is the number of times it succeeded (which can be more than once if used with the /g modifier).

On failure, since it substituted zero times, it returns false (""), which is numerically equivalent to 0.

If PATTERN is a null string, the last successfully executed regular expression is used instead

68

Page 69: Perl Basics with Examples

Example :#!usr/local/bin/perl$text = “winners see gain, losers see pain”;$test =~s/winners/WINNERS/;print $text;

This program displays: WINNERS see gain, losers see pain

Example :#!usr/local/bin/perl@arr = qw(sachin dravid ganguly sachin);foreach(@arr){ # “for(@arr)” and “s/sachin/10/g

for @arr” s/sachin/10/; } do same thing print "\n@arr“;

This program displays: 10 dravid ganguly 10

The Substitution Operator (Contd..)

69

Page 70: Perl Basics with Examples

Example :#!usr/local/bin/perl@old = qw(sachin-bharat dravid-bharat ganguly-bharat kumble-

ind);for (@new = @old) { s/bharat/india/ }print "@olds\n“;print "@new\n";

This program displays:sachin-bharat dravid-bharat ganguly-bharat kumble-indsachin-india dravid-india ganguly-india kumble-ind

The Substitution Operator (Contd..)

70

Page 71: Perl Basics with Examples

Using Modifiers with m// and s///Modifier Descriptiong(m//g or s///g)

Works globally to perform all possible operations.

i Ignores alphabetic casex Ignores white space in pattern and

allows comments.gc Doesn’t reset the search position after a

failed matchs Lets the . Character match newlines.m Lets ^ and $ match embedded \n

characterse Evaluate right hand side as an expressiono Compiles the pattern only once

71

Page 72: Perl Basics with Examples

The Translation Operator (tr///)

Syntax : LVALUE =~ tr/SEARCHLIST/REPLACEMENTLIST/

It scans a string, character by character, and replaces each occurrence of a character found in SEARCHLIST (which is not a regular expression)with the corresponding character from REPLACEMENTLIST

It returns the number of characters replaced or deleted.

If no string is specified via the =~ or !~ operator, the $_ string is altered.

72

Page 73: Perl Basics with Examples

Example :#!usr/local/bin/perl$text = “winners see gain, losers see pain”;$count = ($test =~tr/e/E/); print $text;Print “\n no..of replacements =$count”;

This program displays:winnErs sEE gain,losErs sEE pain no..of replacements =6

The Translation Operator (Contd..)

Modifier Descriptionc (tr///c) Complements the search list.

d Deletes unreplaced characterss Deletes duplicate replaced characters

73

Page 74: Perl Basics with Examples

Example :#!usr/local/bin/perl$text = “winners see gain, losers see pain”;$count = ($test =~tr/e/E/c); print $text; #except “e” all other

charactersPrint “\n no..of replacements =$count”; # are replaced. This program displays:EEEEeEEEEeeEEEEEEEEEeEEEEeeEEEEEno..of replacements =26

The Translation Operator (Contd..)

74

Page 75: Perl Basics with Examples

Different Pattern Delimiters If the pattern contains lots of slash characters(/) ,we

can also use different pattern delimiter with the pattern.

Example :#!usr/local/bin/perl$var = "winners / see / gain,losers / see pain"; If( $var =~ m|see|) { # match with pipes print “String see Found\n”; }If ( $var =~ m ?gain?) { #match with question marks. print “String gain Found”; }

This program displays: String see FoundString gain Found

Perl also allows paired characters like braces and brackets.viz { } ,( ), < >,[ ].

Ex: $var =~s{gain}{GAIN};

75

Page 76: Perl Basics with Examples

The Parts of regular Expressions

In general regular expression can be made up of following parts.

Characters Character Classes Alternative Match Patterns Quantifiers Assertions

76

Page 77: Perl Basics with Examples

Characters

In regular expression any single character matches itself, unless it is a metacharacters with special meaning.

Beside normal characters, Perl defines special characters that you can use in regular expression.

These character must start with backslash.(Otherwise Perl treats it as a normal character).

77

Page 78: Perl Basics with Examples

Characters (Contd..)character Description

\d It is equivalent to [0 - 9]Matches any digit.Ex1 : $var =~ /\d/ # Will match any digit.

\D It is equivalent to [^0 - 9]Matches any non-digit.Ex1 : $var =~ /\D/ # Will match any non-digit.

78

Page 79: Perl Basics with Examples

Characters (Contd..)character Description\w It is equivalent to [0-9a-zA-Z_]

Matches a word character allowable in Perl variable name.i.e. Match any 'word' or alphanumeric character, which is the set of all upper and lower case letters, the numbers 0..9 and the underscore character _Ex :if ( $var =~ /\w/)

\W It is equivalent to [^0-9a-zA-Z_]Matches any non-word characters. Inverse of \wEx :if ($var =~ /\W)

79

Page 80: Perl Basics with Examples

Characters (Contd..)character Description

\s It is equivalent to [ \t\n\r]Matches any white space character.i.e. a space ,a tab ,a newline ,a returnEx :if ($var =~ /\s/)

\S It is equivalent to [^ \t\n\r]Matches any non-white space character.Ex :if ($var =~ /\S/)

80

Page 81: Perl Basics with Examples

Characters (Contd..)character Description\Q Quote(disable) pattern metacharacters until \E

found. Ex:#usr/local/bin/perl$var = “success is not a *”;If($var =~/*/){ print “found in 1st if” ; }If($var ~=/\Q*\E) { print “found in 2nd if “ ; }

It will display :found in 2nd if

\E End case modification.End case modification

81

Page 82: Perl Basics with Examples

Characters (Contd..)character Description\U Change the following characters to upper case

until a \E sequence is encountered.Ex:$var = “SUCCESS is not a *” ;If($var =~/success/){ print “found in 1st if” ; }If($var ~=/\Usuccess\E) { print “found in 2nd if “ ; }It will display: found in 2nd if

\L Change the following characters to lower case until a \E sequence is encountered. Same like \U like \U

82

Page 83: Perl Basics with Examples

Characters (Contd..)character Description\u Change the next character to uppercase.

Ex:#usr/local/bin/perl$var = “SUCCESS is not a *”;If($var =~/\us/){ print “found only s ” ; }If($var ~=/\usu/) { print “found su“ ; }

It will display :found only s

\l Change the next character to lower case

83

Page 84: Perl Basics with Examples

Character Classes

A character class allows a set of possible characters, rather than just a single character, to match at a particular point in a regular expression.

Character classes are denoted by brackets [...], with the set of characters to be possibly matched inside.

Matches one occurrence of any character inside the bracket

Ex 1: $var =~ /w[aoi]nder/ # will match “wander”, ”wonder”, ”winder”

84

Page 85: Perl Basics with Examples

Character Classes (Contd..)

If you use ^ as the first character in a(if you use ^ outside the character class[ ] it works as anchor) character class, then that character class matches any character not in the class.

Ex1:$var = ~/w[^aoi]nder# will look for w followed by something that is# none of “a “or “o” or “ i”.

85

Page 86: Perl Basics with Examples

Alternative Match Patterns

Alternative Match Pattern means that you can specify a series of alternatives for a pattern using | to separate them.

|(called alternation) is equivalent to an “or” in regular expression. It is used to give a chance.

Ex: $var2 =~ /hope|trust/ # will match either “hope” or “trust

Alternatives are checked from left to right, so the first alternative that matches is the one that’s used.

86

Page 87: Perl Basics with Examples

Grouping Alternatives

Grouping[ “( ) “] allows parts of a regular expression to be treated as a single unit.

Parts of a regular expression are grouped by enclosing them in parentheses.

Used to group similar terms by their common characters and only specified the differences.

Example : $var2 =~ /(while |for)loop/ # will match either “while loop” or “for loop”

87

Page 88: Perl Basics with Examples

Grouping Alternatives (Contd..)

The pairs of parentheses are numbered from left to right by the positions of the left parentheses.

Perl places the text that is matched by the regular expression in the first pair of parentheses into the variable $1, and the text matched by the regular expression in the second pair of parentheses into $2,and so on.

Example :#!usr/local/bin/perlmy $text= "Testing";if ($text =~ /((T|N)est(ing|er))/) {print " \$1 = $1 \t \$2 = $2 \t \$3 = $3 \n ";This program displays: $1 = Testing $2 = T $3 = ing

88

Page 89: Perl Basics with Examples

Grouping Alternatives (Contd..)

There are three pairs of parentheses in the above example.

The first one is that which surrounds the whole regular expression, hence $1 evaluates to the whole matched text, which is “Testing”.

The match caused by the second pair of parentheses (T|N), which is “T”, is assigned to $2.

The third pair of parentheses (ing|er) causes $3 to be assigned the value “ing”.

89

Page 90: Perl Basics with Examples

Quantifiers

Quantifiers says how many times something may match, instead of the default of matching just once.

You can use quantifier to specify that a pattern must match a specific number of times.

Quantifiers in a regular expression are like loops in a program.

90

Page 91: Perl Basics with Examples

Quantifiers (Contd..)

character Description* It indicates that the string Immediately to the left

should be matched zero or more times in order to be evaluated as a true.Ex1 : $var =~ /st*/ # Will match for the strings like “st”, ”sttr”, “sts ”, “star”, “son “….The regexp “a*” will search for a followed by either “a” or any other character. It matches all strings which contain the character “a”.

+ It indicates that the string Immediately to the left should be matched one or more times in order to be evaluated as a true.Ex:$var =~ /st*/ # Will match for the strings like “st”, ”sttr”, “sts” ,”star “, but not “son”.

91

Page 92: Perl Basics with Examples

Quantifiers (Contd..)character Description{ } It indicates that how many times the string

immediately to the left should be matched.{n} should match exactly n times.{n,} should match at least n times{n, m} Should match at least n times but not more than m times. Ex : $var =~ /mn{2,4}p/ # will match “mnnp”, “mnnnp”, ”mnnnnp” .

? It indicates that the string Immediately to the left should be matched zero or one times in order to be evaluated as a true.Ex : $var =~ /st?r/ # will match either “star” or “sttr”. $var = ~/comm?a/ # will match either “coma” or “comma”

92

Page 93: Perl Basics with Examples

Quantifiers (Contd..)character Description

.(period) Used to match any single character except newlinecharacterEx :$var1 = ~ /r.n/ # will match “run” , “ran”, “ ron “…

93

Page 94: Perl Basics with Examples

Quantifiers (Contd..)

Quantifiers are greedy by default, which means they will try to match as much as they can.

Ex :$str =“they are players, aren’t they ? “ $str1 = “they are players, weren’t they ? $str =~s/.*are/were/; $str1 =~ s/are.*/ print “$str\n”; print “$str1”

Str will print : weren’t they ?Str1 will print : they Perl will use the .* Preceding “are” to match all the

characters upto the last “are” in the str.

94

Page 95: Perl Basics with Examples

Making Quantifiers Less Greedy

To make Quantifiers less greedy –that is ,to match the minimum number of times possible –you follow the quantifier with a ?

*? Matches zero or more times. +? Matches one or more times. ?? Matches zero or one times. {n}? Matches n times. {n,}? Matches at least n times {m,n} Matches at least n times but more than m

times.

95

Page 96: Perl Basics with Examples

Example :#!usr/local/bin/perl$text = “They are players ,aren’t they?”;$text =~s/.*?are/were/;print $text;

This program displays: Were players ,aren’t they? Example :#!usr/local/bin/perl$txt = “no, these are the documents, over there.”;$txt = ~ s/the(.*?)e/those/;print $txt;

This program displays:no, those are the documents, over there

Making Quantifiers Less Greedy (Contd.)

96

Page 97: Perl Basics with Examples

Metacharacters

A metacharacter is a character or sequence of characters that has special meaning.

Perl recognize the same 12 traditional metacharacters \ | ( ) [ { ^ $ * + ? .

If you want to literally match a metacharacter, you must escape it with a backslash.

The regex /Mr./ matches anything that contains ``Mr'' followed by another character. If you only want to match a string that actually contains ``Mr.,'' you must use /Mr\./.

97

Page 98: Perl Basics with Examples

Example :#!usr/local/bin/perl$text = “#25 $finish”;$text =~ s/#25/\/\/#25/; print $text; This program displays://#25

Example :#!usr/local/bin/perl$text = “//#25 $finish”;$text =~ s/\/\/#25/#25/; print $text; This program displays:#25

Metacharacters (Contd..)

98

Page 99: Perl Basics with Examples

Assertions

Assertions (also called anchors) used to match conditions within a string, not actual data.

Assertions are zero width because they do not consume any characters when they match.

Anchor Description

^(caret) Appears at the beginning of the pattern and finds for a match at beginning of the lineEx : $var =~ /^su/ # Will match the strings those are starting with “su “ i.e. . “sun”, “success”, “super “..

99

Page 100: Perl Basics with Examples

Assertions (Contd..)

character Description$ Appears at the end of the pattern and finds for a

match at end of the lineEx : $var =~ /at$/ # Will match the strings those ends with “at” i.e. . “cat”, “rat “, “beat”…

\Z Matches only at the end of a string, or before a new line at the end.It matches at the end of the match text, before the newline if any is present. Otherwise it is the same as \z.

\z Matches only at the end of string.

100

Page 101: Perl Basics with Examples

Assertions (Contd..)

The difference between “^” and “\A” is that when you use the m –multiline-modifier, “^ “ matches the beginning of every line, but \A retains its original meaning and matches only at the very beginning of the whole string.

Character Description\A Matches only at the beginning of a string.(Similar

to ^)

\G It applies when we use a regular expression to produce multiple matches using the g pattern modifier.It re-anchors the regular expression at the end of the previous match, so that previously matched text takes no part in further matches.Works only with “/g” .

101

Page 102: Perl Basics with Examples

Assertions (Contd..)

Word Boundaries

\b matches on a word boundary.

This occurs whenever a word character is adjacent to a non-word character .

It is equivalent to “\w\W|\W\w” .

Within character classes \b represents backspace rather than a word boundary, just as it normally does in any double-quoted string.

102

Page 103: Perl Basics with Examples

Assertions (Contd..)

Word Boundaries

\B matches on a non-word boundary .

This occurs whenever two word characters or two non-word characters fall adjacent to each other.

It is equivalent to “\w\w|\W\W”.

103

Page 104: Perl Basics with Examples

Word BoundariesExample :#!usr/local/bin/perl$text = "one, ****, three, four"; # “*” is not a

word $text1 = "one,****,three, four"; # characterforeach ($text =~ /\b\w+\b/g){print $_, "\t"; }print "\n using \\B\n";foreach ($text1 =~ /\B\w+\B/g){print $_, "\t"; }

This program displays: one three fourusing \Bn hre ou

Assertions (Contd..)

104

Page 105: Perl Basics with Examples

Regular Expressions-Examples(1)character Description$var =~m/^\./ Will match for dot(.) at the beginning of the

statement.“^” Used to match at the beginning of the line ,dot is a meta character so it has to preceded by “\”

$var =~ /\w+/

Will match a word, a nonempty sequence of alphanumeric characters and underscores such as “trust “ , “12bar8” and “kac_per”.

$var =~/start\s*end/

The strings “start” and “end” optionally separated by any amount of white space (spaces, tabs, newlines).

105

Page 106: Perl Basics with Examples

Regular Expressions-Examples(2)

character Description$var =~/o\.m/ It will match exactly “o.m”

$var =~/blue(colo(ur|r))/

Will match either “bluecolor “or “bluecolour”

$var =~ s/\s+$// Removes(trims) the Trailing white space.

106

Page 107: Perl Basics with Examples

Regular Expressions-Examples(3)

character Description$var =~ s/^\s+//

Removes(trims) the leading white space.Ex:$txt = “ trust in god”; $txt ==~ s/^\s+// Print $txt;It will print : trust in god

$var =~ m/(\d+)/

Will match complete first number.Ex :$txt = "day = 86400s or 1440 mor 24 h";if($txt =~ m/(\d+)/){print "\n\nFirst Number is $1"; } It will print : First Number is 86400

107

Page 108: Perl Basics with Examples

Subroutines

Subroutine is a separate body of code designed to perform a particular task. It is same as function in C language.

The Idea behind subroutines is that old programming dictum –divide and conquer.

Subroutines allow you to divide your code into manageable parts, which makes overall programming easier to handle.

Perl allows you to create subroutines using the “sub” control structure

108

Page 109: Perl Basics with Examples

Example :#!usr/local/bin/perl$v1 =36;large_small(); #subroutine call before definition , parentheses

mustsub large_small{ if($v1 >40) { print "value is bigger than 40\n"; }else{ print "value is smaller than 40\n"; } }$v1 =45;

large_small; # subroutine call after definition , parentheses are

# optional This program displays: value is smaller than 40value is bigger than 40

Subroutines (Contd..)

109

Page 110: Perl Basics with Examples

Scope of variable

Perl variables have global package scope by default.

When we change a variable value in subroutine, we’ll be changing it in the rest of the program by mistake as well.

We can create a variables that are entirely local to subroutine by using keyword “local” or “my”.

They can have same name as global variable and not affect those global variables at all.

110

Page 111: Perl Basics with Examples

Example :#!usr/local/bin/perl$v1 =36;incr(); print "value of v1 =$v1\n";sub incr {

my $var =$v1; print "value before incrementing =$var\n"; $var++;print "value after incrementing =$var\n";

}

This program displays: value before incrementing =36value after incrementing =37value of v1 =36

Scope of variable (Contd..)

111

Page 112: Perl Basics with Examples

Parameters and Arguments

You can pass values to subroutine by placing in parentheses. (ex: incr($v1);)

When you pass values to a subroutine ,those values are stored in a special array named “@_”.

Beside accepting passed values, subroutines can also return values using “return” keyword.

112

Page 113: Perl Basics with Examples

Example :#!usr/local/bin/perl$sum =add(10,20);print "sum =$sum\n“;sub add { ($val1, $val2) = @_;

return $val1+$val2; }

This program displays: sum =30

Perl returns the last value in a sub routine so you can omit the return keyword .

In the above example $val1+$val2 gives the same.

Parameters and Arguments (Contd..)

113

Page 114: Perl Basics with Examples

Parameters and Arguments (Contd..)

Different ways of reading arguments passed to subroutine Sub add {

$val1 =$_[0]; $val2 =$_[1]; }

Sub add {

$val1 =shift@_ ; (or) shift ; $val2 =shift@_ ; (or) shift ;

}In a subroutine ,shift uses @_ by default so you

can use shift directly.

114

Page 115: Perl Basics with Examples

Recursion Recursion happens when a subroutine calls itself, either

directly, or indirectly, via another subroutine Example :#!usr/local/bin/perl0$fact = fact(6);print "factorial of given number =$fact\n“;

sub fact {local $val =shift(@_);if($var ==0) { return 1; }elsif($val==1) { return $val ; }else{ return $val*fact($val-1); } }

This program displays: factorial of given number =720

115

Page 116: Perl Basics with Examples

Passing ListsExample :#!usr/local/bin/perl@small= qw(sachin dravid ganguly );@big =case_convert(@small);print "@big";sub case_convert {

@low =@_;@caps =map(uc ,@low); }

This program displays:

SACHIN DRAVID GANGULY

Subroutines –Examples(1)

116

Page 117: Perl Basics with Examples

Nested subroutines Example :#!usr/local/bin/perlcall();sub call{

display();sub display {

print "you are in inner subroutine\n" ; }print "you are in outer subroutine\n" ; }

print "you are in main\n" ;

This program displays: you are in inner subroutineyou are in outer subroutineyou are in main

Subroutines –Examples(2)

117

Page 118: Perl Basics with Examples

In general passing arrays or hashes flattens their elements into one long list, so it’s a problem if you want to send two or more distinct arrays or hashes.

To preserve integrity, you can pass references to arrays or hashes instead.

References can be created by using a backslash (\) operator on a variable. It is similar to address-of (&)operator in C.

\$var Scalar Reference \@arr Array Reference \%hash Hash Reference

Pass by Reference

118

Page 119: Perl Basics with Examples

Pass by Reference (Contd..)

If you pass \$a (a reference to the $a scalar variable) to a subroutine, then in the subroutine the variable that receives that parameter receives a “reference “ (or a "pointer") pointing to the $a scalar

Dereferencing references(Using prefixes $, @ ,% ,->) $$ref_var Scalar Dereference $$ref_arr Array Dereference #array is

copied into scalar( ref_arr)

$$ref_hash Hash Dereference

119

Page 120: Perl Basics with Examples

Example :#!usr/local/bin/perl@arr = qw(America England france);print "before: arr = " . join(', ', @arr) . "\n";change (\@arr);print "after: arr = " . join(', ', @arr) . "\n“;sub change {

my $ref_arr =shift;$$ref_arr[0]= "China";@{$ref_arr}[1] ="India"; # ”{ }” creates a block.$ref_arr ->[2] ="Japan"; # “ -> “ called arrow operator.}

This program displays: before: arr = America, England, franceafter: arr = China, India, Japan

Pass by Reference (Contd..)

120

Page 121: Perl Basics with Examples

Returning by Reference If you return two arrays normally, their values are

flattened into one long list. If you return references to arrays, you can deference those arrays and reach the original arrays.

Example :#!usr/local/bin/perlsub get_strings{

@str1 = qw(Asia Austrelia Africa);@str2 =qw(Brown White Black);return \@str1 ,\@str2; }

($ref_str1 ,$ref_str2) =get_strings;print "@$ref_str1 \n"; print "@$ref_str2 \n";

This program displays: Asia Austrelia AfricaBrown White Black

You can get lot of material on references that comes with Perl( perldoc perl)

121

Page 122: Perl Basics with Examples

File Handling

A filehandle is nothing more than a nickname for the files you intend to use in your PERL scripts and programs.

Filehandles are a connection between our program and an external data source

Filehandles in Perl are a distinct data type.

STDIN or standard input represents the default input filehandle and usually connected to the keyboard.

STDOUT or Standard output represents the default output filehandle and usually connected to the console device(screen)

122

Page 123: Perl Basics with Examples

File Handling (Contd..)

STDERR or Standard error is the default output error filehandle and usually connected to screen.

Opening a file

To open a file ,use the “open “ function.

Syntax : open FILEHANDLE ,MODE,LIST open FILEHANDLE ,EXPR open FILEHANDLE

The “open “ function takes a filename and creates the handle for it.

123

Page 124: Perl Basics with Examples

File Handling (Contd..)

Opening a file (Contd..) The open function returns a true(nonzero) value if

successful otherwise it returns undefined value.

The filehandle will create in either case but if the call to “open” fails, the filehandle will be unopened and unassigned.

If the “open” fails the reason is stored in special variable “$!” ,which produces a message in string context.

File handling is most error prone ,so use “open and “die” together.

Ex: open (HANDLE, $filename) or die "Can't open $filename: $!\n";

124

Page 125: Perl Basics with Examples

File Handling (Contd..)

Opening a file (Contd..) “open” understands total six modes.

MODE Symbol

Description

Read < Open file handle for read access only.Ex :open FILHND “<$file”;This is the default mode and so the < prefix is usually optional

Write > Open the file for write access only.Ex :open FILHND “>$file”;If the file doesn’t exist then it is created and opened.If the file does exist then it overwrite the existing contents

125

Page 126: Perl Basics with Examples

File Handling (Contd..)

Opening a file (Contd..)MODE Symbol Description

Append >> Open the file for write access only.Ex :open FILHND “>>$file”;If the file doesn’t exist then it is created and opened.If the does exists then it appends that file.

Read-update

+< Open the file for read and write access.Ex :open FILHND “+<$file”;If the file does not exist then the open fails.If the file does exist then it overwrite(contents are preserved for reading) the existing contents.

126

Page 127: Perl Basics with Examples

File Handling (Contd..)

Opening a file (Contd..)MODE Symbol Description

Write-update

>+ Open the file for read and write access.Ex :open FILHND “>+$file”;If the file doesn’t exist then it is created.If the file does exist then it is truncated and its existing contents are lost.(usually used for opening a new file)

Append-update

>>+ Open the file for read and write access only.Ex :open FILHND “>>+$file”;If the file doesn’t exist then it is created and opened.If the file does exist then both read and write commence from the end of the file.

127

Page 128: Perl Basics with Examples

Reading Lines Example :exam.txt :: winners dont do different things.

winners do things differently.. success is not a destination.

Perl Script:#!usr/local/bin/perlopen FILE, "exam.txt" or die $!;$lineno;while(<FILE>){ print $lineno++," \t"; print "$_"; } This program displays: 0 winners dont do different things.1 winners do things differently.2 success is not a destination.

File Handling (Contd..)

128

Page 129: Perl Basics with Examples

File Handling (Contd..) “< >” is called readline or diamond operator.

In the above example “while (<FILE>)” is equivalent to “while(defined($_=<FILE>)”.

Above statement will reads a line from file and assigns it to “$_” and checks whether it is defined or not.

If it is not defined ,probably at the end of the file so it will comes out of the loop.

129

Page 130: Perl Basics with Examples

File Handling (Contd..)

Perl provides a special handle called “ARGV”.

It reads the files from the command line and opens them all if specified.

It will read from Standard input(STDIN) if nothing is specified on the command line.

If you don't specify anything in the angle brackets, whatever is in @ARGV is used instead.

130

Page 131: Perl Basics with Examples

Command line passing Example :exam.txt :: winners dont do different things.

success is not a destination.Perl Script:#!usr/local/bin/perlopen FILE, "exam.txt" or die $!;$match =“do”;while(<FILE>){

If(/$match/) { print “FOUND\n”; }else { print”NOT FOUND”; } }

This program displays: FOUND #In first line It finds matchNOT FOUND #In second line it doesn’t find match

File Handling –Examples(1)

131

Page 132: Perl Basics with Examples

Substituting the source file contentsExample :exam.txt :: winners do not do different things.

success is not a destination.Perl Script:#!usr/local/bin/perlopen FILE, "exam.txt" or die $!;While ($line =<FILE>){

$line =~ s/not/NOT/; push (@out_line ,$line); } close(FILE); open OUTFILE ,“>exam.txt" or die $!; #opening the same for

writing print (OUTFILE @out_line); close (OUTFILE);

File Handling –Examples(2)

132

Page 133: Perl Basics with Examples

Substituting the source file contents Source file contents now changed. exam.txt will contain modified (below)data

exam.txt :: winners do NOT do different things. success is NOT a destination.

File Handling –Examples(2) – contd..

133

Page 134: Perl Basics with Examples

Command line passing Example :#!/usr/local/bin/perlprint "Filename: "; my $infile = <>; chomp $infile;print "New name: ";my $outfile = <>; chomp $outfile;open IN, $infile;open OUT, "> $outfile";print OUT <IN>;close IN; # syntax :: close <filehandle>close OUT;

This program displays: perl filename.pl exam.txtFilename: exam.txtNew name:copy_exam.txt #it will create this file.

File Handling –Examples(3)

134

Page 135: Perl Basics with Examples

Command line passing Example :- if (open (LOGFILE, ">>message .log")) {

print LOGFILE ("This is message number 3.\n"); print LOGFILE ("This is message number 4.\n");

close (LOGFILE); #! close function}

This program displays:This is message number 1. This is message number 2This is message number 3. This is message number 4.

File Handling –Examples(4)

135

Page 136: Perl Basics with Examples

print, printf, and write Functions “print” function writes to the file specified, or to the

current default file if no file is specified. Ex: print ("Hello, there!\n");

print OUTFILE ("Hello, there!\n");

“write” function uses a print format to send formatted output to the file that is specified or to the current default file.

Ex : write (CD_REPORT);

136

Page 137: Perl Basics with Examples

You can use Linux commands in Perl. Below example explains the usage.(It will execute the

run.csh by traversing each directory)Example :#!/usr/local/bin/perl$com2= `find . -type d -name "^UPF*"| tee list_new`; # It will find all

UPF directories

print"$com2\n"; #It willl execute the above command

open LIST ,"list_new" or die $!;foreach $i (<LIST>){print "directry name >>>>>$i";chomp ($i); # list will contain all UPF directories. chdir ("$i"); # chdir is a Perl function ,It will return one on

successful exectition

Importing Linux commands in Perl

137

Page 138: Perl Basics with Examples

Example :$exe=`csh run.csh |tee run.log`; # It will execute the run.csh print"$exe\n";chdir ("..")}close (LIST)

Importing Linux commands in Perl(contd..)

138

Page 139: Perl Basics with Examples

Directories Handling “print” function writes to the file specified, or to the

current default file if no file is specified. Ex: print ("Hello, there!\n");

print OUTFILE ("Hello, there!\n");

“write” function uses a print format to send formatted output to the file that is specified or to the current default file.

Ex : write (CD_REPORT);

139

Page 140: Perl Basics with Examples

Directories Handling (Contd..) To create a new directory, call the function “mkdir”.

Syntax :mkdir (dirname, permissions);Ex: mkdir ("/u/public /newdir ", 0777);

To set a directory to be the current working directory, use the function “chdir”.

Syntax: chdir (dirname);

Ex :chdir ("/u/public/newdir");

140

Page 141: Perl Basics with Examples

Directories Handling (Contd..) To open the directory (already existing) ,use the

function “opendir”

Syntax : opendir (dirvar, dirname);Ex: opendir (DIR, "/u/kacper/mydir");

To close an opened directory, use the “closedir” function

Syntax: chdir (dirname);

Ex : closedir (mydir);

141

Page 142: Perl Basics with Examples

ThanQ

142