12
Perl Process Management Software Tools

Perl Process Management

Embed Size (px)

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

Citation preview

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