Perl Process Management

12
Perl Process Management Software Tools

description

Software Tools. Perl Process Management. 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){ - PowerPoint PPT Presentation

Transcript of Perl Process Management

Page 1: Perl Process Management

Perl Process Management

Software Tools

Page 2: Perl Process Management

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";

}

Page 3: Perl Process Management

Slide 3

system

Where does the command output go? 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

$

Page 4: Perl Process Management

Slide 4

system

How to redirect the I/O? 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

$

Page 5: Perl Process Management

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 nowThu Apr 15 14:58:56 HKT 1999horner pts/0 Apr 15 14:28 (csz096.cs.ust.hk)$

Page 6: Perl Process Management

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.

The invoked shell command will inherit the current working directory from the Perl program.

Page 7: Perl Process Management

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");

Page 8: Perl Process Management

Slide 8

Backquotes

How do you assign the output of a command to a variable?

Answer: Use backquotes.

$now = `date`;

The value of $now will contain the result of the date commend (including the trailing newline).

Page 9: Perl Process Management

Slide 9

Backquotes

Another example:

$ cat back1

#!/usr/local/bin/perl5 -w

$where = `pwd`;

print "The current directory is: $where";

$ back1

The current directory is /homes/horner

$

Page 10: Perl Process Management

Slide 10

Backquotes

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).

$ whohorner pts/0 Apr 15 14:28 (csz096.cs.ust.hk)

$ cat back2#!/usr/local/bin/perl5 -wforeach $_ (`who`){

($who, $where, $when) = /(\S+)\s+(\S+)\s+(.*)/;print "$who on $where at $when\n";

}$ back2horner on pts/0 at Apr 15 14:28 (csz096.cs.ust.hk)$

Page 11: Perl Process Management

Slide 11

Using Processes as Filehandles Another way to run a shell command looks similar to filehandles,

using open, close, and print. The following example allows you to customize a letter and

automatically email it to different recipients:$ cat mail1#!/usr/local/bin/perl5 -wopen(FILE, "letter1"); # open the file@letter = <FILE>; # read the contents into @letterclose(FILE);@emailList = qw([email protected] [email protected]);foreach $email (@emailList){open(MAIL, "|mail -s \"hi!\" $email"); #open messageprint MAIL "Hi $email,\n"; # add header to messageprint MAIL @letter; # add content to messageclose MAIL; # send message!}$ mail1

Page 12: Perl Process Management

Slide 12

Using Processes as Filehandles This example prints the letter:

$ cat print1#!/usr/local/bin/perl5 -wopen(FILE, "letter1"); # open the file@letter = <FILE>; # read the contents into @letterclose(FILE);@nameList = qw(Andrew Bill Bob);foreach $name (@nameList){

open(PRINT, "|lpr –Pcll2a"); # open print jobprint PRINT "Hi $name,\n"; # add header to jobprint PRINT @letter; # add content to jobclose PRINT; # send print job!

}$ print1