Download presentation
Presentation is loading. Please wait.
1
Perl Process Management Software Tools
2
Slide 2 system Perl programs can execute shell commands (Bourne shell) using the system function. system("date"); When the command is finished, the system function returns 0 (not 1 !) if the command completed successfully. if(system("date") != 0){ print "Wah! Date failed!\n"; }
3
Slide 3 system l Where does the command output go? l Answer: The display screen, unless it is redirected. $ cat system1 #!/usr/local/bin/perl5 -w system("date"); $ system1 Thu Apr 15 14:30:03 HKT 1999 $
4
Slide 4 system l How to redirect the I/O? l Answer: Same as the shell $ cat system2 #!/usr/local/bin/perl5 -w if(system("date >now")){ die "cannot create file now"; } $ system2 $ cat now Thu Apr 15 14:30:03 HKT 1999 $
5
Slide 5 system system allows multiple commands, separated by semicolons or newlines. Processes that end in & are run as background jobs (Perl continues and does not wait for the job to finish). $ cat system3 #!/usr/local/bin/perl5 -w $where = "now"; # Perl variable, not shell variable system "(date; who) >$where &"; $ system3 $ cat now Thu Apr 15 14:58:56 HKT 1999 horner pts/0 Apr 15 14:28 (csz096.cs.ust.hk) $
6
Slide 6 system In the previous example, $where is replaced with its value (by Perl, not the shell). If you want to reference a shell variable named $where, you need to put a backslash in front of the dollar sign. l The invoked shell command will inherit the current working directory from the Perl program.
7
Slide 7 system How would you look for the string “ Bill Gates ” in the file bill ? $ grep "Bill Gates" bill Answer: system allows the first argument to be the command, and the remaining arguments to be the arguments to the command. system("grep", "Bill Gates", "bill");
8
Slide 8 Backquotes l How do you assign the output of a command to a variable? l Answer: Use backquotes. $now = `date`; The value of $now will contain the result of the date commend (including the trailing newline).
9
Slide 9 Backquotes l Another example: $ cat back1 #!/usr/local/bin/perl5 -w $where = `pwd`; print "The current directory is: $where"; $ back1 The current directory is /homes/horner $
10
Slide 10 Backquotes l If the backquoted command is used in a list context, you get a list of strings, each one being a line (terminated in a newline). $ who horner pts/0 Apr 15 14:28 (csz096.cs.ust.hk) $ cat back2 #!/usr/local/bin/perl5 -w foreach $_ (`who`){ ($who, $where, $when) = /(\S+)\s+(\S+)\s+(.*)/; print "$who on $where at $when\n"; } $ back2 horner on pts/0 at Apr 15 14:28 (csz096.cs.ust.hk) $
11
Slide 11 Using Processes as Filehandles Another way to run a shell command looks similar to filehandles, using open, close, and print. l The following example allows you to customize a letter and automatically email it to different recipients: $ cat mail1 #!/usr/local/bin/perl5 -w open(FILE, "letter1");# open the file @letter = ;# read the contents into @letter close(FILE); @emailList = qw(horner@cs.ust.hk horner@ust.hk); foreach $email (@emailList){ open(MAIL, "|mail -s \"hi!\" $email"); #open message print MAIL "Hi $email,\n"; # add header to message print MAIL @letter; # add content to message close MAIL; # send message! } $ mail1
12
Slide 12 Using Processes as Filehandles l This example prints the letter: $ cat print1 #!/usr/local/bin/perl5 -w open(FILE, "letter1");# open the file @letter = ;# read the contents into @letter close(FILE); @nameList = qw(Andrew Bill Bob); foreach $name (@nameList){ open(PRINT, "|lpr –Pcll2a"); # open print job print PRINT "Hi $name,\n"; # add header to job print PRINT @letter; # add content to job close PRINT; # send print job! } $ print1
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.