Sayed, Irfan (Irfan) wrote:
> Hi,

Hello,

> I am executing following perl script 
>  
> # perl script to change the hostname of every replica / VOB
>  
> use strict;
>  
> my $CT = "ct";
>  
> my @vob_list = `$CT lsvob -s`;

Assuming that 'ct lsvob -s' outputs the list:

\openssl_openssl
\openssl_openssl_rel
\gatne_tut_input_vob
\gatne_tut_tools_vob
\bt_rel
etc.

Then @vob_list would contain the data:

(   "\openssl_openssl\n",
    "\openssl_openssl_rel\n",
    "\gatne_tut_input_vob\n",
    "\gatne_tut_tools_vob\n",
    "\bt_rel\n",
    "etc.\n"
    )

You should remove the newlines from the data:

chomp( my @vob_list = `$CT lsvob -s` );


> print "Following are the VOBs / Replicas whose hostname needs to be
> change \n";
>  
> print @vob_list;
>  
> foreach my $a (@vob_list)
>  {
>        print $a;    
>       `$CT lsreplica -fmt %[master]p\n -invob $a`; 

The first thing that happens is that perl interpolates this as a double quoted
string so $CT is replaced with 'ct' and \n is replaced with the newline
character and $a is replaced with the current element of @vob_list (for
example "\openssl_openssl\n") and the resulting string ('ct lsreplica -fmt
%[master]p\012 -invob \openssl_openssl\n') is passed to the shell which may or
may not interpolate '%', '[', '\o' and '\n' (depending on the shell and the
current settings for that shell.)  (If '\o' is not a valid shell escape
sequence it will be converted to 'o'.)  Also when a shell sees the newline
character it usually signifies the end of input for that line.

See also:

perldoc -q "using backticks in a void context"


>  }
> 
> If i print the value of $a then the output is fine

Try printing:

print "$CT lsreplica -fmt %[master]p\n -invob $a";

Because that is (probably) what the shell will see.


> but the moment i execute this command
>  
>      `$CT lsreplica -fmt %[master]p\n -invob $a`; 
>  
> it is giving me following error. 
>  
>  cleartool: Error: Unable to determine VOB for pathname ".".

Try it like this:

system( $CT, 'lsreplica', '-fmt', '%[master]p\n', '-invob', $a ) == 0
    or die "system $CT failed: $?";




John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to