The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:st1="urn:schemas-microsoft-com:office:smarttags"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 10">
<meta name=Originator content="Microsoft Word 10">
<link rel=File-List href="Creating_Reuseable_Perl_Scripts_files/filelist.xml">
<link rel=Edit-Time-Data
href="Creating_Reuseable_Perl_Scripts_files/editdata.mso">
<link rel=OLE-Object-Data
href="Creating_Reuseable_Perl_Scripts_files/oledata.mso">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<title>Creating Reuseable Perl Scripts </title>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="City"/>
<o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags"
 name="place"/>
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:Author> </o:Author>
  <o:Template>Normal</o:Template>
  <o:LastAuthor> </o:LastAuthor>
  <o:Revision>2</o:Revision>
  <o:TotalTime>1446</o:TotalTime>
  <o:LastPrinted>2003-05-19T04:08:00Z</o:LastPrinted>
  <o:Created>2003-07-13T16:58:00Z</o:Created>
  <o:LastSaved>2003-07-13T16:58:00Z</o:LastSaved>
  <o:Pages>1</o:Pages>
  <o:Words>3791</o:Words>
  <o:Characters>21613</o:Characters>
  <o:Company> </o:Company>
  <o:Lines>180</o:Lines>
  <o:Paragraphs>50</o:Paragraphs>
  <o:CharactersWithSpaces>25354</o:CharactersWithSpaces>
  <o:Version>10.3311</o:Version>
 </o:DocumentProperties>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <w:WordDocument>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
 </w:WordDocument>
</xml><![endif]--><!--[if !mso]><object
 classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object>
<style>
st1\:*{behavior:url(#ieooui) }
</style>
<![endif]-->
<style>
<!--
 /* Font Definitions */
 @font-face
	{font-family:Helvetica;
	panose-1:2 11 6 4 2 2 2 2 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:536902279 -2147483648 8 0 511 0;}
@font-face
	{font-family:Courier;
	panose-1:2 7 4 9 2 2 5 2 4 4;
	mso-font-alt:"Courier New";
	mso-font-charset:0;
	mso-generic-font-family:modern;
	mso-font-format:other;
	mso-font-pitch:fixed;
	mso-font-signature:3 0 0 0 1 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-parent:"";
	margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:Arial;
	mso-fareast-font-family:"Times New Roman";
	mso-bidi-font-family:"Times New Roman";}
h1
	{mso-style-parent:"List Number";
	mso-style-next:Normal;
	margin-top:12.0pt;
	margin-right:0in;
	margin-bottom:3.0pt;
	margin-left:.25in;
	text-indent:-.25in;
	mso-pagination:widow-orphan;
	page-break-after:avoid;
	mso-outline-level:1;
	mso-list:l0 level1 lfo1;
	tab-stops:list .25in;
	font-size:16.0pt;
	font-family:Arial;
	mso-font-kerning:16.0pt;}
p.MsoListNumber, li.MsoListNumber, div.MsoListNumber
	{margin-top:0in;
	margin-right:0in;
	margin-bottom:0in;
	margin-left:.25in;
	margin-bottom:.0001pt;
	text-indent:-.25in;
	mso-pagination:widow-orphan;
	mso-list:l0 level1 lfo1;
	tab-stops:list .25in;
	font-size:12.0pt;
	font-family:Arial;
	mso-fareast-font-family:"Times New Roman";
	mso-bidi-font-family:"Times New Roman";}
p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
	{margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	mso-bidi-font-size:12.0pt;
	font-family:Arial;
	mso-fareast-font-family:"Times New Roman";
	mso-bidi-font-family:"Times New Roman";}
a:link, span.MsoHyperlink
	{color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{color:purple;
	text-decoration:underline;
	text-underline:single;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
	{margin:0in;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Courier New";
	mso-fareast-font-family:"Times New Roman";}
@page Section1
	{size:8.5in 11.0in;
	margin:1.0in 1.25in 1.0in 1.25in;
	mso-header-margin:.5in;
	mso-footer-margin:.5in;
	mso-paper-source:0;}
div.Section1
	{page:Section1;}
 /* List Definitions */
 @list l0
	{mso-list-id:-120;
	mso-list-type:simple;
	mso-list-template-ids:-262120832;}
@list l0:level1
	{mso-level-style-link:"List Number";
	mso-level-tab-stop:.25in;
	mso-level-number-position:left;
	margin-left:.25in;
	text-indent:-.25in;}
@list l1
	{mso-list-id:1103064378;
	mso-list-type:hybrid;
	mso-list-template-ids:-578516534 894860978 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l1:level1
	{mso-level-start-at:0;
	mso-level-number-format:bullet;
	mso-level-text:\F0D8;
	mso-level-tab-stop:.75in;
	mso-level-number-position:left;
	margin-left:.75in;
	text-indent:-.25in;
	font-family:Wingdings;
	mso-fareast-font-family:"Times New Roman";
	mso-bidi-font-family:"Times New Roman";}
@list l1:level2
	{mso-level-number-format:bullet;
	mso-level-text:o;
	mso-level-tab-stop:1.25in;
	mso-level-number-position:left;
	margin-left:1.25in;
	text-indent:-.25in;
	font-family:"Courier New";}
@list l2
	{mso-list-id:1979602941;
	mso-list-type:hybrid;
	mso-list-template-ids:-1986904476 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
	{mso-level-number-format:bullet;
	mso-level-text:\F0B7;
	mso-level-tab-stop:1.0in;
	mso-level-number-position:left;
	margin-left:1.0in;
	text-indent:-.25in;
	font-family:Symbol;}
ol
	{margin-bottom:0in;}
ul
	{margin-bottom:0in;}
-->
</style>
<!--[if gte mso 10]>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman";}
</style>
<![endif]--><!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="2050"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1"/>
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'>

<div class=Section1>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'><span style='font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>Creating
Reuseable Perl Scripts <o:p></o:p></span></b></p>

<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'><span style='font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>Using
An OO Model<o:p></o:p></span></b></p>

<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'><span style='font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>Of
The ClearCase Region<o:p></o:p></span></b></p>

<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'><span style='font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></b></p>

<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'><span style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:
"Times New Roman"'>Author:<span style='mso-spacerun:yes'>  </span>Leslie D.
Paul<o:p></o:p></span></b></p>

<p class=MsoNormal align=center style='text-align:center'><b style='mso-bidi-font-weight:
normal'><span style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:
"Times New Roman"'><o:p>&nbsp;</o:p></span></b></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>1.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>Introduction<o:p></o:p></span></h1>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoBodyText><span style='mso-bidi-font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>Many companies create ClearCase Perl
Scripts to expand and enhance the core functionality of the ClearCase
system.<span style='mso-spacerun:yes'>  </span>Scripts can be created to
generate reports, perform administrative functions, update ClearCase
attributes, and deploy releases.<span style='mso-spacerun:yes'>  </span>The
development and maintenance of these scripts can consume hundreds of hours.<span
style='mso-spacerun:yes'>  </span>For example, scripts that contain hard coded
lists of VOB names can not be reused in another Region without editing the
script.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>This paper presents an approach to
designing Perl Scripts for reuse across regions and platforms.<span
style='mso-spacerun:yes'>  </span>The design approach is to create an OO Model
of the ClearCase Region defined in a module, and then to build Perl Scripts on
top of the Region Object (module).<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>The reader should be familiar with Perl
Programming, OO Modeling and ClearCase.<span style='mso-spacerun:yes'> 
</span>For OO Perl Programming, the reader is referred to the online Perl
documentation (execute perldoc perltoot at the command line) and to the
O’Reilly (Panther) book entitled “Advanced Perl Programming” by Sriram
Srinivasan and to Damian Conway’s book “Object Oriented Perl”.<o:p></o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>2.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>Object
Oriented Concepts<o:p></o:p></span></h1>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>For those not familiar with
Object Oriented Perl Programming, here are some of the key benefits and
terminology. <o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Data is encapsulated and
protected within <i style='mso-bidi-font-style:normal'>objects</i>.<span
style='mso-spacerun:yes'>    </span>The object’s data is known as <i
style='mso-bidi-font-style:normal'>attribute values</i>.<span
style='mso-spacerun:yes'>  </span>The object’s subroutines that control access
to the attributes are called <i style='mso-bidi-font-style:normal'>methods</i>.<span
style='mso-spacerun:yes'>  </span>An object has the following:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l2 level1 lfo3;
tab-stops:list 1.0in'><![if !supportLists]><span style='font-size:10.0pt;
font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:10.0pt'>Identity or name<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l2 level1 lfo3;
tab-stops:list 1.0in'><![if !supportLists]><span style='font-size:10.0pt;
font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:10.0pt'>Attributes<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:1.0in;text-indent:-.25in;mso-list:l2 level1 lfo3;
tab-stops:list 1.0in'><![if !supportLists]><span style='font-size:10.0pt;
font-family:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol'><span
style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:10.0pt'>Methods<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>A <i style='mso-bidi-font-style:
normal'>class </i>is a formal specification for creating instances of
objects.<span style='mso-spacerun:yes'>  </span>The class defines the allowed
attributes names and the methods that are used within an object to access or
update attribute values.<span style='mso-spacerun:yes'>  </span>Classes within
Perl are defined in a separate text file called a <i style='mso-bidi-font-style:
normal'>module.<span style='mso-spacerun:yes'>  </span></i>A class is a Perl
module that follows some simple rules (see ‘perldoc perlobj’ for more details).<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The <i style='mso-bidi-font-style:
normal'>encapsulation </i>of data within an object is one of the key benefits
of OO programming.<span style='mso-spacerun:yes'>  </span>Many programs can
share the same object, but the data within the object cannot be accessed
directly.<span style='mso-spacerun:yes'>  </span>Instead of using global
variables, OO programs rely on an Object to be the single point of control for
attribute values.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>3.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>A
Model for ClearCase<o:p></o:p></span></h1>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoBodyText>A OO model could be created for ClearCase.<span
style='mso-spacerun:yes'>  </span>Here one:</p>

<p class=MsoNormal><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
 o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
 stroked="f">
 <v:stroke joinstyle="miter"/>
 <v:formulas>
  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
  <v:f eqn="sum @0 1 0"/>
  <v:f eqn="sum 0 0 @1"/>
  <v:f eqn="prod @2 1 2"/>
  <v:f eqn="prod @3 21600 pixelWidth"/>
  <v:f eqn="prod @3 21600 pixelHeight"/>
  <v:f eqn="sum @0 0 1"/>
  <v:f eqn="prod @6 1 2"/>
  <v:f eqn="prod @7 21600 pixelWidth"/>
  <v:f eqn="sum @8 21600 0"/>
  <v:f eqn="prod @7 21600 pixelHeight"/>
  <v:f eqn="sum @10 21600 0"/>
 </v:formulas>
 <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
 <o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_s1028" type="#_x0000_t75" style='position:absolute;
 margin-left:0;margin-top:5.2pt;width:279pt;height:4in;z-index:1;
 mso-wrap-style:none;v-text-anchor:middle' fillcolor="#09c" strokecolor="#3cc"
 strokeweight="3pt">
 <v:imagedata src="Creating_Reuseable_Perl_Scripts_files/image001.wmz" o:title=""/>
 <v:shadow color="#b2b2b2"/>
</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout'>

<table cellpadding=0 cellspacing=0 align=left>
 <tr>
  <td width=0 height=7></td>
 </tr>
 <tr>
  <td></td>
  <td><img width=372 height=384
  src="Creating_Reuseable_Perl_Scripts_files/image002.gif" v:shapes="_x0000_s1028"></td>
 </tr>
</table>

</span><![endif]><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<br style='mso-ignore:vglayout' clear=ALL>

<p class=MsoNormal><span style='font-size:10.0pt'>A region is composed of
vobs.<span style='mso-spacerun:yes'>  </span>Each vob can have many views
associated with it.<span style='mso-spacerun:yes'>  </span>A Vob consists of
Elements.<span style='mso-spacerun:yes'>  </span>A Element has one or more branches
(assumes a main branch).<span style='mso-spacerun:yes'>  </span>A branch consists
of one or more versions.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Since the objective of this
paper is to show a reuseable design approach – only the ‘region’ and ‘vob’
classes are considered here.<span style='mso-spacerun:yes'>  </span>Using just
the Region and Vob classes, the approach to creating reuseable Perl scripts can
be illustrated.<span style='mso-spacerun:yes'>  </span>We’ll start by defining
what a region is.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>4.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>Defining
a Region<o:p></o:p></span></h1>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>Careful thought should be given to the
task of defining a Region.<span style='mso-spacerun:yes'>  </span>The tools and
design approach presented here works best when Region(s) are clearly
defined.<span style='mso-spacerun:yes'>  </span>The design and organization of
a corporate network is closely tried to the concept of Region.<span
style='mso-spacerun:yes'>  </span>Corporate networks involve three essential
structural components:<span style='mso-spacerun:yes'>  </span>Domains(s),
Organization Units (OU), and Site(s).<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>A domain is a logical grouping of
computers for administrative and security purposes.<span
style='mso-spacerun:yes'>  </span>A domain is a logical grouping that is not
necessarily based on the physical location of computers.<span
style='mso-spacerun:yes'>  </span>Hence, a domain can hold computers located in
multiple sites, or buildings, or just a single campus.<span
style='mso-spacerun:yes'>  </span>For geographical dispersed computers, a WAN
or LAN is used to provide network connectivity.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>A single domain can be sub-divided into
Organization Units.<span style='mso-spacerun:yes'>  </span>A company with a
single domain may have separate Organization Units or Divisions for Marketing,
Sales, Research, Manufacturing and Distribution.<span
style='mso-spacerun:yes'>  </span>Each Division may use a WAN/LAN for
interconnecting multiple sites.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>A ClearCase region is a conceptual
subset of the hosts of a single network domain based on a logical
grouping.<span style='mso-spacerun:yes'>  </span>A region could be an entire
domain.<span style='mso-spacerun:yes'>  </span>A region could be defined for
each Organization Unit within a domain.<span style='mso-spacerun:yes'> 
</span>A region could be defined for each site within an Organization Unit or
Division.<span style='mso-spacerun:yes'>  </span>In fact, a region could be
defined for a single computer used by a single group.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>Splitting a large Region (one with many
VOBs) into two or more Regions will make the Region class execute faster –
since a region’s data is cached when the Region Class is loaded by a Perl
Script.<o:p></o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>5.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>The
ClearCase Region<o:p></o:p></span></h1>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>A Region is a logical subset of a local
area network where all hosts refer to all VOB and View storage areas through
the same network pathnames.<span style='mso-spacerun:yes'>    </span>All hosts
in a region will use the same global pathnames when referring to shared
resources.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>All ClearCase servers must reside in a
region that is defined at the time of ClearCase installation.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>To identify the region a server belongs
to, execute:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l1 level1 lfo2;
tab-stops:list .75in'><![if !supportLists]><span style='font-size:10.0pt;
font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
Wingdings'><span style='mso-list:Ignore'>Ø<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>cleartool hostinfo -long<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>Client:<span
style='mso-spacerun:yes'>  </span></span><st1:City><st1:place><span
  style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>Chicago</span></st1:place></st1:City><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>Product:<span
style='mso-spacerun:yes'>  </span>ClearCase 5.0<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>Operating
System :<span style='mso-spacerun:yes'>  </span>SunOS 5.6 Generic<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>Registry
host:<span style='mso-spacerun:yes'>   </span>Chicago_sun50<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>Registry
region:<span style='mso-spacerun:yes'>   </span>credit_unix_region<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>License
host:<span style='mso-spacerun:yes'>  </span>Chicago_sun51<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>It’s possible to list all Regions
defined in the ClearCase Registry using the command:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l1 level1 lfo2;
tab-stops:list .75in'><![if !supportLists]><span style='font-size:10.0pt;
font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
Wingdings'><span style='mso-list:Ignore'>Ø<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>cleartool lsregion<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>credit_unix_region<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>market_unix_region<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>To identify the region on a Unix host:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l1 level1 lfo2;
tab-stops:list .75in'><![if !supportLists]><span style='font-size:10.0pt;
font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
Wingdings'><span style='mso-list:Ignore'>Ø<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>cat /var/adm/atria/rgy/rgy_region.conf<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>credit_unix_region<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>To identify the region on a Windows
host, open up the Registry tab of the ClearCase program in Control Panel.<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in'><span style='font-size:10.0pt;
font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>A VOB is a ClearCase repository
associated with a single Region.<span style='mso-spacerun:yes'>  </span>A VOB
cannot span more than one region.<span style='mso-spacerun:yes'>  </span>By
running a long listing of a VOB, you can display the region associated with a
VOB:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l1 level1 lfo2;
tab-stops:list .75in'><![if !supportLists]><span style='font-size:10.0pt;
font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
Wingdings'><span style='mso-list:Ignore'>Ø<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>cleartool lsvob –long /vobs/credit<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><span
style='mso-spacerun:yes'>                          </span>Tag:<span
style='mso-spacerun:yes'>  </span>/vobs/credit<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><span
style='mso-spacerun:yes'>      </span>Global path:<span
style='mso-spacerun:yes'>   </span>\\chicago_sun51\vobstore\credit.vbs<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><span
style='mso-spacerun:yes'>      </span>Server host:<span
style='mso-spacerun:yes'>   </span>Chicago_sun51<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><span
style='mso-spacerun:yes'>      </span>Access:<span style='mso-spacerun:yes'> 
</span>public<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><span
style='mso-spacerun:yes'>      </span>Mount options:<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><span
style='mso-spacerun:yes'>      </span>Region:<span style='mso-spacerun:yes'>  
</span>credit_unix_region<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'><span
style='mso-spacerun:yes'>      </span>…<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>By knowing the region associated with a
server, you also know the set of available VOBs.<span
style='mso-spacerun:yes'>  </span>To list all VOBs for a given region:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l1 level1 lfo2;
tab-stops:list .75in'><![if !supportLists]><span style='font-size:10.0pt;
font-family:Wingdings;mso-fareast-font-family:Wingdings;mso-bidi-font-family:
Wingdings'><span style='mso-list:Ignore'>Ø<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><![endif]><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'>cleartool lsvob –region
credit_unix_region<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:.75in;text-indent:.25in'><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:"Times New Roman"'>/vobs/credit<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>6.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>A
Layered Approach to Code Reuse<o:p></o:p></span></h1>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The following diagram
illustrates the layered approach to the design of reuseable Perl scripts:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1025" type="#_x0000_t75"
 style='width:6in;height:243pt' o:ole="">
 <v:imagedata src="Creating_Reuseable_Perl_Scripts_files/image003.wmz" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=576 height=324
src="Creating_Reuseable_Perl_Scripts_files/image004.gif" v:shapes="_x0000_i1025"><![endif]><!--[if gte mso 9]><xml>
 <o:OLEObject Type="Embed" ProgID="Visio.Drawing.6" ShapeID="_x0000_i1025"
  DrawAspect="Content" ObjectID="_1119602661">
 </o:OLEObject>
</xml><![endif]--><span style='font-size:10.0pt'><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>A Perl script can be designed
so that it is completely reuseable between sites.<span
style='mso-spacerun:yes'>  </span>The reuseable Perl script uses one or more
instances of Objects created from a Perl Class.<span style='mso-spacerun:yes'> 
</span>The Perl Classes are mostly reuseable.<span style='mso-spacerun:yes'> 
</span>However, at the time the class library is installed, some minor editing
may be required.<span style='mso-spacerun:yes'>  </span>For example, the
location of the Configuration Files has to be added to Class.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The Region Class reads a
configuration file, region.conf, that contains data for all known regions.<span
style='mso-spacerun:yes'>  </span>Hence, the region.conf file is site specific.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>In addition, the Perl scripts
and modules presented here, use the Log::Log4perl class module available from
CPAN.<span style='mso-spacerun:yes'>  </span>The Log4perl class provides an OO
log management system.<span style='mso-spacerun:yes'>  </span>The Log4perl
class is designed after the popular Log4j class.<span
style='mso-spacerun:yes'>  </span>All Perl scripts and objects presented here
will be available at the <a href="http://www.cpan.org/">www.cpan.org</a> web
site (search for ClearCase::Region).<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>7.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>A OO
Model of the ClearCase Region<o:p></o:p></span></h1>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>A region consists of zero or
more VOBs.<span style='mso-spacerun:yes'>  </span>This composition can be
represented by the UML diagram:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><!--[if gte vml 1]><v:shape
 id="_x0000_i1026" type="#_x0000_t75" style='width:96pt;height:355.5pt'>
 <v:imagedata src="Creating_Reuseable_Perl_Scripts_files/image005.wmz" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=128 height=474
src="Creating_Reuseable_Perl_Scripts_files/image006.gif" v:shapes="_x0000_i1026"><![endif]><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>This Rose model will be used
to illustrate a reuseable Perl Script Design approach.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>An OO model of the ClearCase
Region is dependent on the network configuration, the ClearCase installation
and policies.<span style='mso-spacerun:yes'>  </span>However, the specific
network configuration and attributes (like region names) can be loaded into the
Region class using a text file.<span style='mso-spacerun:yes'>  </span>This
text file, called Region.cfg, will be read by the Region class when the class
is first loaded by a calling program.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>As an example, let’s consider
a simple ClearCase network configuration.<span style='mso-spacerun:yes'> 
</span>In this scenario, a region contains one or more VOBs.<span
style='mso-spacerun:yes'>  </span>Development projects also use one or more
VOBs, and all VOBs are within the same region.<span style='mso-spacerun:yes'> 
</span>Also, development projects never shared the same VOB.<span
style='mso-spacerun:yes'>  </span>Hence, development projects form a
‘subregion’.<span style='mso-spacerun:yes'>  </span>Within each VOB, a simple
branch per release policy is used.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Here is a sample Region.cfg
for this scenario:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Courier'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#*****************************************************************<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># Region.cfg<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#*****************************************************************<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># This is the
configuration file that defines ClearCase region(s)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#*****************************************************************<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># This file is read by
the Region.pm module.<span style='mso-spacerun:yes'>  </span>For each region,
the<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># values are read and
loaded into a hash with the following keys:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># subregion,
description, vobs, vobdir.<span style='mso-spacerun:yes'>  </span>All of these
values must<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># be defined in this
file.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># The file may contain
the configuration information for multiple<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># regions.<span
style='mso-spacerun:yes'>  </span>Configuration information for each region
must start<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># with
['region_name'].<span style='mso-spacerun:yes'>  </span>All text starting with
a '#' character up<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># to the end-of-line
are comments.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># NOTE 1:<span
style='mso-spacerun:yes'>    </span>The keys (subregion, description, vobs,
vobdir)<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<span
style='mso-spacerun:yes'>            </span>must be defined in this file in
lower case and listed<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<span
style='mso-tab-count:2'>           </span> in order for every record.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># NOTE 2:<span
style='mso-spacerun:yes'>    </span>A Blank Line must terminate the subregion
record (of<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<span
style='mso-tab-count:2'>           </span> keys: subregion, description, vobs,
vobdir).<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># NOTE 3:<span
style='mso-spacerun:yes'>    </span>The subregion key must be the first entry
listed for<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<span
style='mso-tab-count:2'>           </span> each record and uniquely defines a
project within a<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<span
style='mso-tab-count:2'>           </span> region.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># <o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># NOTE 4:<span
style='mso-spacerun:yes'>    </span>All string values must be quoted with
single quotes '.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'># NOTE 5:<span
style='mso-spacerun:yes'>    </span>All array values must be specified between
brackets<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<span
style='mso-spacerun:yes'>            </span>(i.e. []).<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>#*****************************************************************<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>['market_unix_region']<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>subregion<span
style='mso-spacerun:yes'>   </span>'ma'<span
style='mso-spacerun:yes'>                    </span># subregion id for a
project<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>description 'Market
Analysis'<span style='mso-spacerun:yes'>       </span># project description<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>vobs<span
style='mso-spacerun:yes'>        </span>[ 'current', 'futures' ]<span
style='mso-spacerun:yes'>    </span># array of all vobs<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>vobdir<span
style='mso-spacerun:yes'>     </span>'/vobs'<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>subregion<span
style='mso-spacerun:yes'>   </span>'tr'<span
style='mso-spacerun:yes'>                    </span># subregion id for a
project<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>description
'International trades'<span style='mso-spacerun:yes'>  </span># project
description<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>vobs<span
style='mso-spacerun:yes'>        </span>[ 'trades' ]<span
style='mso-spacerun:yes'>            </span># array of all vobs<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>vobdir<span
style='mso-spacerun:yes'>     </span>'/vobs'<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>['credit_unix_region']<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>subregion<span
style='mso-spacerun:yes'>   </span>'cr'<span
style='mso-spacerun:yes'>                    </span># subregion id for a
project<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>description
'Credit'<span style='mso-spacerun:yes'>                </span># project
description<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>vobs<span
style='mso-spacerun:yes'>        </span>[ 'credit' ]<span
style='mso-spacerun:yes'>          </span><span
style='mso-spacerun:yes'>  </span># array of all vobs<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'>vobdir<span
style='mso-spacerun:yes'>     </span>'/vobs'<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Courier'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>The
Region.cfg file contains the ‘rules’ for entering the data.<span
style='mso-spacerun:yes'>  </span>The Region class calls a simple ‘parser’ that
reads and parses the Region.cfg file when the class is first loaded.<span
style='mso-spacerun:yes'>  </span>The parser is contained in a helper class,
Region_Cfg_Parser.pm, whose only purpose is to create a hash object for the
Region class.<span style='mso-spacerun:yes'>  </span>The
ClearCase::Region_Cfg_Parser-&gt;new() method reads the region.cfg files,
parses it, and returns a hash reference.<span style='mso-spacerun:yes'> 
</span>So, for ‘market_unix_region’, the new() method returns a hash reference
for a hash with two keys:<span style='mso-spacerun:yes'>  </span>‘ma’ and
‘tr’.<span style='mso-spacerun:yes'>  </span>The associated values of these
keys are the subregion records (stored in another hash reference).<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>The
Region_Cfg_Parser module locates the Region.cfg configuration file by searching
all the directories in the @INC array.<span style='mso-spacerun:yes'> 
</span>When ClearCase::Region is downloaded from CPAN, the ‘default’
configuration file listed above is installed among with the modules.<span
style='mso-spacerun:yes'>  </span>The Region.cfg file should be modified to
reflect your company’s ClearCase configuration.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>The
Region_Cfg_Parser uses the name-value pairs in the Region.cfg configuration
file for creating the internal hash structure.<span style='mso-spacerun:yes'> 
</span>This makes it easy to add an attribute.<span style='mso-spacerun:yes'> 
</span>For example, by adding the line:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>Registry_server<span
style='mso-tab-count:2'>              </span>‘Chicago_sun66’<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>after
each vobdir line, the new attribute becomes part of the region hash – without
any changes to the parser.<span style='mso-spacerun:yes'>  </span>This can be
represented as:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75"
 style='width:431.25pt;height:191.25pt' o:ole="">
 <v:imagedata src="Creating_Reuseable_Perl_Scripts_files/image007.wmz" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=575 height=255
src="Creating_Reuseable_Perl_Scripts_files/image008.gif" v:shapes="_x0000_i1027"><![endif]><!--[if gte mso 9]><xml>
 <o:OLEObject Type="Embed" ProgID="Visio.Drawing.6" ShapeID="_x0000_i1027"
  DrawAspect="Content" ObjectID="_1119602662">
 </o:OLEObject>
</xml><![endif]--><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>Of
course, a new accessor method would have to added to Region.pm for this new
attribute.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>Also,
the Region class checks to see what ClearCase Region it is operating
under.<span style='mso-spacerun:yes'>  </span>Under Unix, the Region class
opens the file ‘/var/adm/atria/rgy/rgy_region.conf” to obtain the region name.<span
style='mso-spacerun:yes'>  </span>Under MS-Windows, the Region class opens
Registry key:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>HKEY_LOCAL_MACHINE\SOFTWARE\Atria\ClearCase\CurrentVersion\InteropRegion<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>to
determine the ClearCase region.<span style='mso-spacerun:yes'>  </span><o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>So,
a program that uses Region class data for in the ‘market_unix_region’ sees that
only the VOB names “current”, “futures”, and “trades” are valid.<span
style='mso-spacerun:yes'>  </span>The same program operating in the
‘credit_unix_region’ sees that only the VOB name ‘credit’ is valid.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>The
Region constructor, new(), is used to create the Region object.<span
style='mso-spacerun:yes'>  </span>Actually, the new() constructor creates a
‘subregion’ object having been passed a valid subregion name.<span
style='mso-spacerun:yes'>  </span>So, how do we determine what subregion names
are valid in any given region?<span style='mso-spacerun:yes'>  </span>For
interactive Perl scripts, you can invoke the new() constructor as:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>$region = Region-&gt;new(undef);<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>If
the new() constructor get an undef value for the subregion name, it will
provide a list of all valid subregion names and prompt the user to choose
one.<span style='mso-spacerun:yes'>  </span>Here’s an example of passing
‘undef’ to the new constructor in the market_unix_region:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt'>Did
not get subregion for project. Must ask...<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt'>Please
select project:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span
style='mso-spacerun:yes'>   </span><span style='mso-tab-count:2'>                     </span>1)<span
style='mso-spacerun:yes'>  </span>International trades uses trades with project
id = &quot;tr&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span
style='mso-spacerun:yes'>   </span><span style='mso-tab-count:2'>                     </span>2)<span
style='mso-spacerun:yes'>  </span>Market Analysis uses current futures with
project id = &quot;ma&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt'>Enter
1, 2, ... 2): 1<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>Another
approach to getting a valid subregion name is to first obtain a list of all
valid subregion names (for the region your operating in), and then use the
Getopt::long Perl Module to allow the user to ‘pass’ the choice on the command
line.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>use Getopt::Long;<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>Then
the program can obtain a list of valid subregion names:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>my(%options<span style='mso-tab-count:
3'>                             </span>) = ();<span style='mso-tab-count:2'>                </span>#
command line parameters<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>my($i<span style='mso-tab-count:
4'>                                        </span>) = 0;<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>my($subregion<span style='mso-tab-count:
2'>               </span><span style='mso-tab-count:1'>            </span>) =
&quot;&quot;;<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>my($subregion_name<span
style='mso-tab-count:1'>     </span><span style='mso-tab-count:1'>            </span>)
= undef;<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>my(@subregions<span
style='mso-tab-count:2'>                        </span>) =
Region-&gt;subregions();<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>my(@subregion_flags<span
style='mso-tab-count:1'>     </span><span style='mso-tab-count:1'>            </span>)
= ();<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>Then
set up the options hash (that is used by getoptions):<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>$i = 0;<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>foreach $subregion (@subregions) {<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:2'>                        </span>$subregion_flags[$i] =
0;<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:2'>                        </span>$options{$subregion} =
\$subregion_flags[$i];<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:2'>                        </span>$i++;<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>}<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>and
then call getoptions:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>$retval = GetOptions(%options);<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>if ($retval == 0) {<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'><span style='mso-tab-count:1'>            </span>$logger-&gt;error(&quot;Error
in parameter specification.\n&quot;);<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'><span style='mso-tab-count:1'>            </span>exit
1;<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>}<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>If
the calling program has set one of the subregion options on the command line,
then the %options hash will have the corresponding member of the subregion_flag
array set.<span style='mso-spacerun:yes'>  </span>Of course, if an invalid
subregion name is passed on the command line, the GetOptions program will now
respond with an error – based on the list of valid subregion names obtained
from the Region class.<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>The
$subregion_name was initialized as ‘undef’.<span style='mso-spacerun:yes'> 
</span>If the user passed the subregion name as a command line option (like –tr
or –ma), then this can be determined using:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span># Determine if the subregion was set
on the command line<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span># <o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>$i = 0;<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>foreach $bno (@subregion_flags) {<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:2'>                        </span>$sum += $bno;<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:2'>                        </span>if ( $bno &gt; 0 ) {<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:3'>                                    </span>$subregion_name
= $subregions[$i];<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:2'>                        </span>}<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:2'>                        </span>$i++;<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>}<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>Next,
we check that no more than one option was passed on the command line:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span># Determine if more than one
subregion was set on command line<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>#<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>if ($sum &gt; 1) {<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:2'>                        </span>$logger-&gt;error(&quot;only
one region option can be specified.\n&quot;);<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:2'>                        </span>exit 1;<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span>}<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>If
two or more options were passed on the command line (e.g. both –tr and –ma are
passed), then the Region new constructor fails will an error message.<span
style='mso-spacerun:yes'>  </span>Calling ‘new’:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>$region = Region-&gt;new($subregion_name);<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>will
create one subregion object. If no subregion is selected on the command line,
$subregion_name is undefined and the Region class will ‘prompt’ for one (see
the Region_test program example below).<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'>The
Class method, subregions(), can be used to retrieve a list of all the
subregions in a region.<span style='mso-spacerun:yes'>  </span>To retrieve all
the Vob names in the current region, the following Perl code fragment could be
used:<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>my(@subregions) = Region-&gt;subregions();<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>foreach $subregion (@subregions) {<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span><span style='mso-tab-count:1'>            </span>@vobs
= Region-&gt;vobs($subregion);<o:p></o:p></span></p>

<p class=MsoPlainText><span style='font-family:Arial;mso-bidi-font-family:"Courier New"'><span
style='mso-tab-count:1'>            </span><span style='mso-tab-count:1'>            </span>$logger-&gt;info(&quot;\nFor
subregion name \'$subregion\' all vobs are: @vobs\n&quot;);<o:p></o:p></span></p>

<p class=MsoPlainText style='text-indent:.5in'><span style='font-family:Arial;
mso-bidi-font-family:"Courier New"'>}<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:8.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:8.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>This code was used in the
‘Region_test’ script that will be available on CPAN, along with the Region.pm
class module.<span style='mso-spacerun:yes'>  </span>When the Region_test
script is execute in the ‘market_unix_region’, it produces the following on in
my MS Command Prompt Window:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>&gt; perl Region_test<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Current region is
market_unix_region<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The subregions are tr ma<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>For subregion name 'tr' all
vobs are: trades<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>For subregion name 'tr' the
VOB directory is: /vobs<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>For subregion name 'ma' all
vobs are: current futures<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>For subregion name 'ma' the
VOB directory is: /vobs<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Got tr<span
style='mso-spacerun:yes'>                </span>: 0<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Got ma<span
style='mso-spacerun:yes'>             </span>: 0<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Did not get subregion for
project. Must ask...<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Please select project:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span
style='mso-spacerun:yes'>   </span>1)<span style='mso-spacerun:yes'> 
</span>International trades uses trades with project id = &quot;tr&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span
style='mso-spacerun:yes'>   </span>2)<span style='mso-spacerun:yes'> 
</span>Market Analysis uses current futures with project id = &quot;ma&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Enter 1, 2, ... 2): 1<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Created Region object for tr<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>&gt;<o:p></o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>8.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>Sample
program using the ClearCase Region<o:p></o:p></span></h1>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The sample program, main_cos
(available from CPAN) demonstrates the use of the Region class.<span
style='mso-spacerun:yes'>  </span>The main_cos program is used to identify any
checked out revisions on the trunk (or main branch).<span
style='mso-spacerun:yes'>  </span>The main_cos program expects to be passed one
subregion name on the command line:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>main_cos<span style='mso-spacerun:yes'>   </span>–tr<span
style='mso-tab-count:2'>               </span># OR<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
2'>                        </span><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>main_cos<span style='mso-spacerun:yes'>   </span>–cr<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>However, if the subregion
name option is omitted, the Region Class will prompt:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>Please select project:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span
style='mso-spacerun:yes'>   </span><span style='mso-tab-count:2'>                     </span>1)<span
style='mso-spacerun:yes'>  </span>International trades uses trades with project
id = &quot;tr&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span
style='mso-spacerun:yes'>   </span><span style='mso-tab-count:2'>                     </span>2)<span
style='mso-spacerun:yes'>  </span>Market Analysis uses current futures with
project id = &quot;ma&quot;<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt'>Enter
1, 2, ... 2): 1<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:.5in'><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>So, the main_cos script can
be reused in different regions and subregions because the Region class
encapsulates the relevant data.<span style='mso-spacerun:yes'>  </span>The
main_cos script uses the variable ${vobdir) = Region-&gt;vobdir() to define the
VOB storage directory location for all VOBs.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>9.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>Using
the Region Class<o:p></o:p></span></h1>

<p class=MsoNormal><span style='font-size:10.0pt;font-family:Helvetica;
mso-bidi-font-family:"Times New Roman"'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The Region.pm class module
and all the associated sample scripts referenced in this paper are available
from CPAN.<span style='mso-spacerun:yes'>  </span>The Region module is not a
‘generic’ class that can be applied to every site, so some customization will
be required.<span style='mso-spacerun:yes'>  </span>The Region module assumes
that a branch per release version control policy is being used and hence,
contains methods that are most useful when using branch per release
management.<span style='mso-spacerun:yes'>  </span>Nevertheless, the Region
class is a great starting point for building reuseable objects within your
company – and then layering (or building) reuseable Perl scripts on top.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Include the line:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>use ClearCase::Region;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>in Perl scripts that will be
using the Region.pm module.<span style='mso-spacerun:yes'>  </span>This module
must either be installed in one of @INC directories, or specified in one of the
$PERL5LIB directories.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The Region.pm class module
and the associated sample scripts (Region_test, co_backup and main_cos) all use
the Log::Log4perl Class.<span style='mso-spacerun:yes'>  </span>Log::Log4perl
is freely available from CPAN and SourceForge (<a
href="http://log4perl.sourceforge.net/">http://log4perl.sourceforge.net</a>).<span
style='mso-spacerun:yes'>  </span>The Log::Log4perl module requires the
Log::Dispatch bundle as well.<span style='mso-spacerun:yes'>  </span>If you
don’t have Log::Log4perl, use the CPAN module or PPM to upgrade your Perl
environment prior to using these programs.<o:p></o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>10.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>A OO
Model of the ClearCase Vob<o:p></o:p></span></h1>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoBodyText>The following Rose model is an OO model of the ClearCase
VOB:</p>

<p class=MsoNormal><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><!--[if gte vml 1]><v:shape
 id="_x0000_i1028" type="#_x0000_t75" style='width:108.75pt;height:354pt'>
 <v:imagedata src="Creating_Reuseable_Perl_Scripts_files/image009.wmz" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=145 height=472
src="Creating_Reuseable_Perl_Scripts_files/image010.gif" v:shapes="_x0000_i1028"><![endif]><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The sample script, Vob_test
can be used to test the Vob object.<span style='mso-spacerun:yes'> 
</span>Running Vob_test produces:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>&gt;perl Vob_test<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>All known vobs: trades
current futures<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Did not get flag for vob.
Must ask...<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Please select vob:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span
style='mso-spacerun:yes'>   </span>1)<span style='mso-spacerun:yes'> 
</span>trades<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span
style='mso-spacerun:yes'>   </span>2)<span style='mso-spacerun:yes'> 
</span>current<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span
style='mso-spacerun:yes'>   </span>3)<span style='mso-spacerun:yes'> 
</span>futures<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Enter 1, 2, ... 3): 3<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>You have chosen futures.<span
style='mso-spacerun:yes'>  </span>Is this CORRECT?(y/n): y<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>You answered Y<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Selected vob is futures<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Vob subregion via class
method is ma<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Vob subregion via object
method is ma<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>src_dir is &quot;source&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>lib_dirs is
&quot;lib,class&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>relnums is
&quot;1,2,3,4,5,6&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>active is
&quot;0,0,0,1,1,1&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>active releases: &quot;4 5
6&quot;<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Like the Region Class, the
Vob class also uses a help class, Vob_Cfg_Parser.pm, for the task of parsing
the Vob.cfg file.<span style='mso-spacerun:yes'>  </span>Here is the Vob.cfg
file that is being used here:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#*****************************************************************<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># Vob.cfg<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#*****************************************************************<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># This is the configuration
file that defines ClearCase vob(s)<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#*****************************************************************<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># This file is read by the
Vob.pm module.<span style='mso-spacerun:yes'>  </span>For each region, the<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># values are read and loaded
into a hash with the following keys:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># vob, src_dir, lib_dirs,
relnums, active.<span style='mso-spacerun:yes'>  </span>All of these values
must<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># be defined in this file for
each [region subregion] section.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># The file may contain the
configuration information for multiple<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># vobs.<span
style='mso-spacerun:yes'>  </span>All configuration information for all vob
located in a<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># subregion must start with
[region subregion] section header.<span style='mso-spacerun:yes'>  </span>All<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># text starting with a '#'
character up to the end-of-line are<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># comments.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># NOTE 1:<span
style='mso-spacerun:yes'>    </span>The keys (vob, src_dir, lib_dirs, relnums,
active)<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<span
style='mso-spacerun:yes'>            </span>must be defined in this file in
lower case and listed<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<span style='mso-tab-count:
1'>          </span> in order for every record.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># NOTE 2:<span
style='mso-spacerun:yes'>    </span>A Blank Line must terminate the vob record
(of keys:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<span style='mso-tab-count:
1'>          </span> vob, src_dir, lib_dirs, relnums, active).<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># NOTE 3:<span
style='mso-spacerun:yes'>    </span>The 'vob' key must be the first entry
listed for each<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<span style='mso-tab-count:
1'>          </span> record.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># NOTE 4:<span
style='mso-spacerun:yes'>    </span>The first number identified in the relnums
array musts<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<span
style='mso-spacerun:yes'>            </span>be the trunk.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># NOTE 5:<span
style='mso-spacerun:yes'>    </span>The active releases array uses a '1' to
identify<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<span
style='mso-spacerun:yes'>            </span>releases that are active.<span
style='mso-spacerun:yes'>  </span>There must be a one-to-one<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<span
style='mso-spacerun:yes'>            </span>correspondence between the relnums
array and the<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<span
style='mso-spacerun:yes'>            </span>active array.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># NOTE 6:<span
style='mso-spacerun:yes'>    </span>All string values must be quoted with
single quotes '.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'># NOTE 7:<span
style='mso-spacerun:yes'>    </span>All array values must be specified between
brackets<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<span
style='mso-spacerun:yes'>            </span>(i.e. []).<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>#*****************************************************************<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>[market_unix_region ma]<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>vob<span style='mso-tab-count:
2'>                   </span>'current'<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>src_dir<span
style='mso-tab-count:2'>              </span>'servlet/source'<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>lib_dirs<span
style='mso-tab-count:2'>              </span>['servlet/lib', 'servlet/class']<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>relnums<span
style='mso-spacerun:yes'>     </span><span style='mso-tab-count:1'>        </span>[
1, 2, 3, 4, 5, 6 ]<span style='mso-spacerun:yes'>    </span># all release
numbers<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>active<span
style='mso-spacerun:yes'>     </span><span style='mso-tab-count:1'>           </span>[
0, 0, 0, 1, 1, 1 ]<span style='mso-spacerun:yes'>    </span># array of active
releases<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>vob<span style='mso-tab-count:
2'>                   </span>'futures'<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>src_dir<span
style='mso-tab-count:2'>              </span>'source'<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>lib_dirs<span
style='mso-tab-count:2'>              </span>['lib', 'class']<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>relnums<span
style='mso-spacerun:yes'>    </span><span style='mso-tab-count:1'>         </span>[
1, 2, 3, 4, 5, 6 ]<span style='mso-spacerun:yes'>    </span># all release
numbers<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>active<span
style='mso-spacerun:yes'>      </span><span style='mso-tab-count:1'>          </span>[
0, 0, 0, 1, 1, 1 ]<span style='mso-spacerun:yes'>    </span># array of active
releases<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>[market_unix_region tr]<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>vob<span style='mso-tab-count:
2'>                   </span>'trades'<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>src_dir<span
style='mso-tab-count:2'>              </span>'src'<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>lib_dirs<span
style='mso-tab-count:2'>              </span>['bin']<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>relnums<span
style='mso-spacerun:yes'>     </span><span style='mso-tab-count:1'>        </span>[
1, 2, 3 ]<span style='mso-spacerun:yes'>             </span># all release
numbers<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>active<span
style='mso-spacerun:yes'>      </span><span style='mso-tab-count:1'>          </span>[
1, 1, 1 ]<span style='mso-spacerun:yes'>         </span><span
style='mso-spacerun:yes'>    </span># array of active releases<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>[credit_unix_region cr]<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>vob<span style='mso-tab-count:
2'>                   </span>'credit'<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>src_dir<span
style='mso-tab-count:2'>              </span>'src'<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>lib_dirs<span
style='mso-tab-count:2'>              </span>['bin']<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>relnums<span
style='mso-spacerun:yes'>     </span><span style='mso-tab-count:1'>        </span>[
2, 3, 4, 5 ]<span style='mso-spacerun:yes'>          </span># all release
numbers<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>active<span
style='mso-spacerun:yes'>      </span><span style='mso-tab-count:1'>          </span>[
1, 1, 1, 1 ]<span style='mso-spacerun:yes'>          </span># array of active
releases<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The rules for setting up the Vob.cfg
file are defined in the comments.<span style='mso-spacerun:yes'>  </span>Adding
an additional attribute is easy.<span style='mso-spacerun:yes'>  </span>For
example, the Group Id for each Vob could be added with the line:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>group_id<span style='mso-tab-count:1'>            </span>‘bankofamerica’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>after the ‘active’ line for
each Vob record.<span style='mso-spacerun:yes'>  </span>The
ClearCase::Vob_Cfg_Parser-&gt;new() method will then add the key, group_id, to
the hash reference to class Vob, as shown here:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75"
 style='width:381pt;height:301.5pt' o:ole="">
 <v:imagedata src="Creating_Reuseable_Perl_Scripts_files/image011.wmz" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=508 height=402
src="Creating_Reuseable_Perl_Scripts_files/image012.gif" v:shapes="_x0000_i1029"><![endif]><!--[if gte mso 9]><xml>
 <o:OLEObject Type="Embed" ProgID="Visio.Drawing.6" ShapeID="_x0000_i1029"
  DrawAspect="Content" ObjectID="_1119602664">
 </o:OLEObject>
</xml><![endif]--><span style='font-size:10.0pt'><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Of course, the Vob.pm class
would have to be modified to include an accessor method as well.<o:p></o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>11.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>Sample
program using both the ClearCase Region and Vob<o:p></o:p></span></h1>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The sample program, co_backup
(available from CPAN), demonstrates the use of both the Region class and the
Vob class to create a reuseable Perl script. The co_backup Perl script creates
a compress cpio backup of all checked out files in all dynamic views.<span
style='mso-spacerun:yes'>  </span>Hence, the co_backup script can be used to
back up files that are being worked on by developers (in dynamic views) –
without having to back up the entire view.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>In addition, this script only
cares about the ‘active’ releases (or views).<span style='mso-spacerun:yes'> 
</span>The co_backup script uses the Vob object to determine which releases
(branches) are active for a VOB.<span style='mso-spacerun:yes'>  </span>The
co_backup script assumes that all developer’s views follow a naming convention “&lt;login&gt;_&lt;subregion&gt;_&lt;relno&gt;”.<span
style='mso-spacerun:yes'>  </span>Then by starting in the /view directory, all
developer’s views can be listed using:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>cleartool lsview –short ‘*_${subregion}_${relno}’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Of course, if your company
has a different naming convention, then this line will need to change.<span
style='mso-spacerun:yes'>  </span>The co_backup script will start the
developer’s view (if required).<span style='mso-spacerun:yes'>  </span>The list
of active releases is used to determine which developer’s views to back
up.<span style='mso-spacerun:yes'>  </span>So, for the “market_unix_region”
listed above, only the developer’s views:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_tr_1’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_tr_2’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_tr_3’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_ma_4’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_ma_5’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_ma_6’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>will be backed up (provided
there is some checked out files).<span style='mso-spacerun:yes'>  </span>When
the co_backup program is executed on the ClearCase server in the
credit_unix_region, the developer’s views:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_cr_2’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_cr_3’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_cr_4’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>‘*_cr_5’<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>will be backed up.<span
style='mso-spacerun:yes'>  </span>Hence, the co_backup script is reuseable in
different regions.<span style='mso-spacerun:yes'>  </span>If the co_backup
script encounters an error, like a bad view, it logs the error message to:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><span style='mso-tab-count:
1'>            </span>$HOME/logs/${subregion}${relno}.${vob}.backup.log<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>using the class
Log::Log4perl.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<h1><![if !supportLists]><span style='font-size:10.0pt;font-family:Helvetica;
mso-fareast-font-family:Helvetica'><span style='mso-list:Ignore'>12.<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp; </span></span></span><![endif]><span
style='font-size:10.0pt;font-family:Helvetica;mso-bidi-font-family:Arial'>Summary<o:p></o:p></span></h1>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='font-size:10.0pt'>A Perl script can be designed
so that it is completely reuseable between sites.<span
style='mso-spacerun:yes'>  </span>The reuseable Perl script uses one or more
instances of Objects created from a Perl Classes.<span
style='mso-spacerun:yes'>  </span>The Perl Classes are mostly reuseable.<span
style='mso-spacerun:yes'>  </span>For the co_backup script, this can be
represented as:<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1030" type="#_x0000_t75"
 style='width:394.5pt;height:273pt' o:ole="">
 <v:imagedata src="Creating_Reuseable_Perl_Scripts_files/image013.wmz" o:title=""/>
</v:shape><![endif]--><![if !vml]><img border=0 width=526 height=364
src="Creating_Reuseable_Perl_Scripts_files/image014.gif" v:shapes="_x0000_i1030"><![endif]><!--[if gte mso 9]><xml>
 <o:OLEObject Type="Embed" ProgID="Visio.Drawing.6" ShapeID="_x0000_i1030"
  DrawAspect="Content" ObjectID="_1119602665">
 </o:OLEObject>
</xml><![endif]--><span style='font-size:10.0pt'><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>The design of the Perl
Classes depends on the network topology, defined Regions, defined subregions or
projects and the version control policy being used.<span
style='mso-spacerun:yes'>  </span>This paper presented a simple network
configuration using a ‘branch per release’ version control policy is illustrate
the design of ClearCase classes for Region and Vob.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:10.0pt'>Using the Region and Vob
classes, many Perl scripts can be created that are reuseable between sites,
platforms and even companies.<span style='mso-spacerun:yes'>  </span>The sample
scripts provided with this paper can be used to start building your own
reuseable Perl Scripts.<o:p></o:p></span></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><span style='font-size:10.0pt'><o:p>&nbsp;</o:p></span></p>

</div>

</body>

</html>