Script Programming with Perl II

Script Programming with Perl II

Script Programming with Perl II 15-123 Systems Skills in C and Unix Subroutines sub sum { return $a + $b; } So we can call this as: $a = 12; $b = 10; $sum = sum(); print “the sum is $sum\n”; Passing Arguments Passing Arguments A perl subroutine can be called with a list in parenthesis. Example: sub add { $tmp = 0; # this defines a global variable foreach $_ (@_) { $tmp += $_; } return $tmp; } Local variables Local variables Perl subroutines can define local private variables. Example sub product { my ($x); # defines the local variable x foreach $_ (@_) { $x *= $_;} return $x; } You can have a list of local variables by simply expanding the list as: my ($x, $y, @arr); Command line arguments Command Line Arguments in Perl • A Perl program can take command line arguments. One or more command line • arguments can be passed when calling a perl program. – perl program.pl infile.txt outfile.txt • The number of command line arguments is given by $#ARGV + 1 and command line arguments are named $ARGV[0], $ARGV[1], etc LWP Library for www in Perl • LWP contains a collection of Perl modules – use LWP::Simple; – $_ = get($ url ); – print $_; • Good reference at – http://www.perl.com/pub/a/2002/08/20/perlandl wp.html Getopt • The Getopt::Long module implements an extended getopt function called GetOptions(). • Command line arguments are given as – -n 20 or –num 20 – -n 20 -t test • use Getopt::Long; • $images_to_get = 20; • $directory = "."; • GetOptions("n=i" => \$images_to_get, "t=s" => \$directory); References: http://perldoc.perl.org/Getopt/Long.html Hashes or associative arrays %hash = ( ); # initializes a hash to empty set. We can add elements later $hash{‘guna’} = “aa”; $hash{‘neil’} = “ab”; $hash{‘george’}=”ac”; each function • Each function allows us to extract both value and key from a hash table example %table = {“ guna ”, 10, “me”, 20}; while (($key, $value) = each(%table) ) { print "$key => $value\n"; } References Creating a Reference to a scalar $num = 10; $numref = \$num; Creating a Reference to an array @array = ( guna , me, neil ); $arrayref = \@array; Creating a Reference to a hashtable %hash = {guna, aa, me, bb, him, cc}; $hashref = \%hash; Dereferences Dereferencing a Reference to a scalar $num = 10; $numref = \$num; print $$numref; # prints the value 10 Dereferencing a Reference to an array using -> operator @array = ( guna , me, neil ); $arrayref = \@array; print $arrayref->[0]; # prints ‘guna’ Dereferencing a Reference to an array using -> operator @array= [guna, me, [blue, red]]; $arrayref = \@array; print $arrayref->[2][1]; # prints ‘red’ Systems programming opendir(DIR,"."); foreach $file (readdir(DIR)) { print "$file \n"; } close(DIR); Examples print "which directory to change to : "; chomp($dir = <STDIN>); if (chdir $dir){ print "we are now in $dir \n"; } else { print "we could not change to $dir \n"; } Modifying Permissions foreach $file (“guna.c”, “temp.o”) { unless chmod (O666, $file) { warn “could not chmod the file $file \n”; } } Renaming a file • Rename($file1, $file2); • Exercise: Write a perl script that will take a folder as command line argument and rename all .txt files to . htm files Copying a file • use File:Copy; • copy($file1, $file2); • Exercise: Write a perl script that will create a duplicate folder given a folder. Name the new folder, dup_folder Running a perl script from another #!/usr/local/bin/perl system 'perl mkdir.pl file.txt'; Encoding pages • Example PAGE: for ($page=1; ; $page++){ $url = “http://www.cs.cmu.edu /”.$page; last PAGE if ($count == $maxcount ); } Shell Programming 15-123 Systems Skills in C and Unix The Shell • A command line interpreter that provides the interface to Unix OS. What Shell are we on? • echo $SHELL • Most unix systems have – Bourne shell ( sh ) • No command history – Korn shell ( ksh) • Shell functions – C shell ( csh ) • History, no shell functions • More details at unix.com A Shell Script #!/bin/sh -- above line should always be the first line in your script # A simple script who am I Date • Execute with: sh first.sh Things to do with shell scripts • Remove all empty folders • Remove all duplicate lines from a file • Send email if the assignment is not submitted • Check output of a submitted program against sample output • Given a roster file, extract ID’s and create folders for each person • Rename a folder that contains .txt files to a folder that contains all .htm files Variables in shell • System variables – $SHELL – $LOGNAME – $PWD • User defined variables – name=guna – echo “$name” echo • echo [options] [string, variables...] • Options – -n Do not output the trailing new line. – -e enable interpretation – escaped special characters \a alert (bell) \b backspace \c suppress trailing new line \n new line \r carriage return \t horizontal tab \\ backslash Shell Variables • echo $PATH – an environment variable • Environment variables can be changed – PATH=$PATH: /usr/local/apache/bin :. • Examples – dir=pwd – echo $dir – subdir=“lab1” – abspath=$dir/$subdir Command Line Arguments • $# - represents the total number of arguments (much like argv) – except command • • $0 - represents the name of the script, as invoked • • $1, $2, $3, .., $8, $9 - The first 9 command line arguments • • $* - all command line arguments OR • • $@ - all command line arguments Using Quotes • Shell scripting has three different styles of quoting -- each with a different meaning: – unquoted strings are normally interpreted – "quoted strings are basically literals -- but $variables are evaluated“ – 'quoted strings are absolutely literally interpreted‘ – `commands in quotes like this are executed, their output is then inserted as if it were assigned to a variable and then that variable was evaluated` Examples • day=`date | cut -d" " -f1` • printf "Today is %s.\n" $day Expressions • Evaluating Expr – sum=`expr $1 + $2` – printf "%s + %s = %s\n" $1 $2 $sum • Special Variables – $? - the exit status of the last program to exit – $$ - The shell's pid – Examples • test "$LOGNAME" = guna • echo $? expr • Syntax: expr $var1 operator $var2 • Operators + , - , / , % , \* Conditionals • test -f somefile.txt or • [ -f somefile.txt ] • If statement if [ "$LOGNAME"="guna" ] then printf "%s is logged in" $LOGNAME else printf "Intruder! Intruder!" fi The for loop for var in "$@" do printf "%s\n" $var done for (( i = 1 ; i < 20 ; i++ )) do done While loop ls | sort | while read file do echo $file done I/O • File descriptors – Stdin(0), stdout(1), stderror(2) • Input from stdin – read data – echo $data • redirecting – rm filename 1>&2 Functions whologgedin() { echo “hello $LOGNAME” } Calling: > whologgedin grep/sed/tr/s • grep pattern file • sed s/regex1/regex2/ • sed tr/[a-z]/[A-Z]/ Calling shell commands from perl • #! /usr/local/perl • `mv $file1 $file2`; Things to do with shell scripts • Remove all empty folders • Remove all duplicate lines from a file • Send email if the assignment is not submitted • Check output of a submitted program against sample output • Given a roster file, extract ID’s and create folders for each person • Rename a folder that contains .txt files to a folder that contains all .htm files Coding Examples.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    41 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us