Difference between revisions of "PERL/C3/Exception-and-error-handling-in-PERL/English"
(Created page with "'''Title of script''':''' Exception and Error handling in PERL''' '''Author: Nirmala Venkat''' '''Keywords: Exception, Error handling, ward(), die(), eval(), gedit, video tu...") |
Nancyvarkey (Talk | contribs) |
||
| Line 93: | Line 93: | ||
'''my( $numerator, $denominator ) = @_;''' | '''my( $numerator, $denominator ) = @_;''' | ||
| + | | style="border:1pt solid #000000;padding:0.097cm;"| Here we have defined a '''function divide''' which takes two '''input parameters''' | ||
| + | |||
| + | i.e '''dollar numerator '''and''' dollar''' '''denominator''' | ||
| + | |||
| + | '''At the rate underscore '''(@_) is a '''special variable '''used to pass the '''parameter list''' to the '''function'''. | ||
| + | |||
| + | |- | ||
| + | | style="border:1pt solid #000000;padding:0.097cm;"| | ||
'''if ($denominator == 0)''' | '''if ($denominator == 0)''' | ||
| Line 103: | Line 111: | ||
'''}''' | '''}''' | ||
| + | | style="border:1pt solid #000000;padding:0.097cm;"| If the '''denominator''' is zero, the '''die''' function will quit the script. | ||
| − | + | It will also display the error message for the user to read. | |
| − | + | Else it will print the output. | |
| − | |||
| − | + | |- | |
| − | | style="border:1pt solid #000000;padding:0.097cm;"| | + | | style="border:1pt solid #000000;padding:0.097cm;"| |
| − | + | '''divide(121, 2);''' | |
| − | ''' | + | '''divide(360, 4);''' |
| + | | style="border:1pt solid #000000;padding:0.097cm;"| These are the '''function call statements'''. | ||
| − | + | The first two times, the '''function''' is executed because the '''second parameter''' is not zero. | |
| − | + | |- | |
| + | | style="border:1pt solid #000000;padding:0.097cm;"| | ||
| − | + | '''divide(412, 0);''' | |
| + | | style="border:1pt solid #000000;padding:0.097cm;"| The third time, the '''denominator''' value is zero, so the '''die function''' is executed. | ||
| − | + | |- | |
| + | | style="border:1pt solid #000000;padding:0.097cm;"| | ||
| − | + | '''divide(525, 7);''' | |
| − | + | | style="border:1pt solid #000000;padding:0.097cm;"| The last '''divide function '''will not be executed as the '''die function '''quits the script. | |
| − | + | ||
| − | + | ||
| − | The last '''divide function '''will not be executed as the '''die function '''quits the script. | + | |
|- | |- | ||
| Line 221: | Line 230: | ||
'''};''' | '''};''' | ||
| + | | style="border:1pt solid #000000;padding:0.097cm;"| Here in our example,''' ''' | ||
| + | |||
| + | '''open FILE''' invokes the''' die statement, '''if it has trouble in opening a file''' “test.dat”''' | ||
| + | |||
| + | |- | ||
| + | | style="border:1pt solid #000000;padding:0.097cm;"| | ||
'''if ($!) {''' | '''if ($!) {''' | ||
| Line 227: | Line 242: | ||
'''}''' | '''}''' | ||
| − | | style="border:1pt solid #000000;padding:0.097cm;"| | + | | style="border:1pt solid #000000;padding:0.097cm;"| '''Perl''' gives the '''system error message''' from the last '''eval''' block to the variable '''dollar exclamation( $!)''' |
| − | + | ||
| − | + | ||
| − | + | ||
| − | '''Perl''' gives the '''system error message''' from the last '''eval''' block to the variable '''dollar exclamation( $!)''' | + | |
| − | |||
|- | |- | ||
| style="border:1pt solid #000000;padding:0.097cm;"| Press''' Ctrl+S''' | | style="border:1pt solid #000000;padding:0.097cm;"| Press''' Ctrl+S''' | ||
| style="border:1pt solid #000000;padding:0.097cm;"| Press '''Ctrl + S''' to save the file. | | style="border:1pt solid #000000;padding:0.097cm;"| Press '''Ctrl + S''' to save the file. | ||
| − | |||
|- | |- | ||
| style="border:1pt solid #000000;padding:0.097cm;"| Switch to terminal | | style="border:1pt solid #000000;padding:0.097cm;"| Switch to terminal | ||
| Line 276: | Line 285: | ||
'''my( $total, $count ) = @_;''' | '''my( $total, $count ) = @_;''' | ||
| + | | style="border:1pt solid #000000;padding:0.097cm;"| Type the code as shown on the screen. | ||
| + | |||
| + | We are passing''' $total''', '''$count''' as input parameters to the '''function average'''. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |- | ||
| + | | style="border:1pt solid #000000;padding:0.097cm;"| | ||
'''if ($count == 0){''' | '''if ($count == 0){''' | ||
| Line 286: | Line 307: | ||
'''}''' | '''}''' | ||
| − | | style="border:1pt solid #000000;padding:0.097cm;"| | + | | style="border:1pt solid #000000;padding:0.097cm;"|We have a possibility of getting an error if the count is zero. |
| − | + | ||
| − | + | ||
| − | + | ||
| − | We have a possibility of getting an error if the count is zero. | + | |
Here, that is handled with the '''die statement'''. | Here, that is handled with the '''die statement'''. | ||
| − | The error message returned from '''eval''' is displayed using '''$@ | + | The error message returned from '''eval''' is displayed using '''$@ ( dollar at the rate)''' |
If not, it will print the '''Average''' value. | If not, it will print the '''Average''' value. | ||
| Line 300: | Line 317: | ||
|- | |- | ||
| style="border:1pt solid #000000;padding:0.097cm;"| | | style="border:1pt solid #000000;padding:0.097cm;"| | ||
| − | | style="border:1pt solid #000000;padding:0.097cm;"| Let us execute the program. | + | | style="border:1pt solid #000000;padding:0.097cm;"| Press Ctrl +S to save the file. Let us execute the program. |
|- | |- | ||
| style="border:1pt solid #000000;padding:0.097cm;"| | | style="border:1pt solid #000000;padding:0.097cm;"| | ||
| Line 320: | Line 337: | ||
Summary | Summary | ||
| − | | style="border:1pt solid #000000;padding:0.097cm;"| This brings us to the end of this tutorial. Let us summarise | + | | style="border:1pt solid #000000;padding:0.097cm;"| This brings us to the end of this tutorial. Let us summarise. |
In this tutorial, we have learnt how to | In this tutorial, we have learnt how to | ||
| Line 333: | Line 350: | ||
| style="border:1pt solid #000000;padding:0.097cm;"| As an assignment do the following. | | style="border:1pt solid #000000;padding:0.097cm;"| As an assignment do the following. | ||
| − | # On your | + | # On your '''Linux''' machine, create a file '''emp.txt''' with 5 employee names. |
# Change permission of '''emp.txt '''to '''READ''' only. | # Change permission of '''emp.txt '''to '''READ''' only. | ||
| − | #:'''Note''': Go through the relevant''' Linux''' spoken tutorials on the''' spoken tutorial''' website for change permission option. | + | #:'''Note''': Go through the relevant''' Linux''' spoken tutorials on the''' spoken tutorial''' website for '''change permission''' option. |
| − | # Write a Perl program to open the '''emp.txt''' file in '''WRITE''' mode and add few employee names to it. | + | # Write a '''Perl''' program to open the '''emp.txt''' file in '''WRITE''' mode and add few employee names to it. |
| − | # Using "'''eval'''", print appropriate error message if open/write operation fails. | + | # Using "'''eval'''", print appropriate error message if '''open/write''' operation fails. |
|- | |- | ||
| style="border:1pt solid #000000;padding:0.097cm;"| Slide 12: | | style="border:1pt solid #000000;padding:0.097cm;"| Slide 12: | ||
Latest revision as of 11:28, 8 August 2015
Title of script: Exception and Error handling in PERL
Author: Nirmala Venkat
Keywords: Exception, Error handling, ward(), die(), eval(), gedit, video tutorial
| |
|
| Slide 1: | Welcome to the Spoken Tutorial on Exception and error handling in PERL |
| Slide 2: | In this tutorial we will learn to
|
| Slide 3: | For this tutorial, I am using
You can use any text editor of your choice. |
| Slide 4: | To follow this tutorial, you should have working knowledge of Perl Programming.
If not, then go through the relevant Perl spoken tutorials on the spoken tutorial website. |
| Slide 5: | When an error occurs:
|
| We can identify and trap an error in a number of ways.
We will see few commonly used methods in Perl. | |
| Slide 6:
Warn() Function Example: chdir('/downloads') or warn “Cannot change directory” |
The warn function only raises a warning message without taking further action. |
| Slide 7:
Die() Function Example: chdir('/downloads') or die “Cannot change directory” |
The die function immediately terminates the execution and displays the error message. |
| Let us understand the die function using a sample program, which I have already saved. | |
| Switch to the Terminal and type
gedit die.pl & |
Go to the terminal and type
gedit die dot pl ampersand and press Enter |
| Point to the filename die.pl in the Titlebar of gedit. | This is code in die.pl file.
Let us understand the code now. |
| #!/usr/bin/perl
sub divide { my( $numerator, $denominator ) = @_; |
Here we have defined a function divide which takes two input parameters
i.e dollar numerator and dollar denominator At the rate underscore (@_) is a special variable used to pass the parameter list to the function. |
|
if ($denominator == 0) {die "Can't divide by zero!";} else { print " Result: ",($numerator / $denominator),"\n";} } |
If the denominator is zero, the die function will quit the script.
It will also display the error message for the user to read. Else it will print the output.
|
|
divide(121, 2); divide(360, 4); |
These are the function call statements.
The first two times, the function is executed because the second parameter is not zero. |
|
divide(412, 0); |
The third time, the denominator value is zero, so the die function is executed. |
|
divide(525, 7); |
The last divide function will not be executed as the die function quits the script. |
| Press Ctrl + S | Press Ctrl + S to save the program. |
| Let us execute the program. | |
| On the terminal type
perl die dot pl >> press Enter |
Switch back to the terminal and type,
perl die dot pl and press Enter. |
| Highlight
Output Result: 60.5 Result: 90 Can't divide by zero! at die.pl line 6. |
The output is displayed as shown here.
Can't divide by zero! - This is the error message we have given in the program in the die statement. <<PAUSE>> |
| Next, we will see how to use eval function in error handling. | |
| Slide 8:
eval() Function |
eval function is used for handling run-time errors or exceptions.
For example, built-in errors such as out of memory, divide by zero or user defined errors. |
| Slide 9:
Syntax for eval(): eval {….} if ($!) { # deal with error here } |
The general syntax for eval function is shown here.
The dollar exclamation($!) special variable holds the error message, if any. Otherwise, dollar exclamation( $!) holds an empty string. That means it is evaluated as false. |
| Switch to the terminal. | Let us understand the eval function using a sample program.
Go to the terminal. |
| Type gedit eval dot pl ampersand >> press Enter | Type gedit eval dot pl ampersand and press Enter |
| In the eval dot pl file, type the following code as displayed on the screen.
Let me explain the code now. | |
| Example: 1
#!/usr/bin/perl my $f = 'test.dat'; eval { open FILE, $f or die "Cannot open $f: $!"; }; |
Here in our example,
open FILE invokes the die statement, if it has trouble in opening a file “test.dat” |
|
if ($!) { print "An error occurred ($!) \n"; } |
Perl gives the system error message from the last eval block to the variable dollar exclamation( $!) |
| Press Ctrl+S | Press Ctrl + S to save the file. |
| Switch to terminal
perl eval dot pl >> press Enter |
Switch back to the terminal and type,
perl eval dot pl and press Enter. |
| Highlight Output
An error occurred (No such file or directory) |
The system error message is displayed as shown here. |
| Let us see another example.
This time we will see an error message returned from eval function using $@ (dollar at the rate). | |
| Let us switch back to the eval dot pl file. | |
| Example : 2
average(123, 5); average(356, 41); average(42,0); average(500, 7);
sub average { my( $total, $count ) = @_; |
Type the code as shown on the screen.
|
|
if ($count == 0){ die "Can't divide by zero!: $@";} else{ print " Average: ",($total / $count),"\n";} } |
We have a possibility of getting an error if the count is zero.
Here, that is handled with the die statement. The error message returned from eval is displayed using $@ ( dollar at the rate) If not, it will print the Average value. |
| Press Ctrl +S to save the file. Let us execute the program. | |
| Switch back to the terminal and type,
perl eval.pl and press Enter. | |
| Highlight Output
Average: 24.6 Average: 8.68292682926829 Can't divide by zero! : at eval.pl line 15. |
The output is as shown here. |
| Slide 10:
Summary |
This brings us to the end of this tutorial. Let us summarise.
In this tutorial, we have learnt how to
|
| slide 11:
Assignment |
As an assignment do the following.
|
| Slide 12:
About the Spoken Tutorial Project |
The video at the following link summarises the Spoken Tutorial project.
Please download and watch it. |
| Slide 13:
Spoken Tutorial Workshops |
The Spoken Tutorial Project Team
For more details, please write to us. |
|
Slide 14: Acknowledgement |
Spoken Tutorial project is funded by NMEICT, MHRD, Government of India. More information on this mission is available at this link. |
| This is Nirmala Venkat from IIT Bombay, signing off. Thanks for watching. |