http://www.perlmonks.org?node_id=1056480


in reply to execution of command inside for loop fails

If you add use strict; use warnings; at the beginning of your script, Perl will tell you what you are doing wrong.

UPDATE: I cannot test this but I guess you need a chomp. Here is how I would write it:

use strict; use warnings; sub ReadPolicies { my $type = shift; my @Policies = `/opt/OV/bin/opctemplate -l | grep -i $type | awk ' +{print \$2}'`; return @Policies; } for( ReadPolicies( "DBSPI" ) ){ chomp; # not sure this is required.... my $cmd = "/opt/OV/bin/opctemplate -e $_"; print "$cmd\n"; my $output= `$cmd`; print "$output\n"; }

Replies are listed 'Best First'.
Re^2: execution of command inside for loop fails
by kaka_2 (Sexton) on Oct 04, 2013 at 10:41 UTC

    Thank You. adding strict and warnings was very helpful.

      Here is my updated code

      sub ReadPolicies { # based on the below command it reads values in ar +ray my ($type) = @_; my @Policies = `/opt/OV/bin/opctemplate -l | grep -i $type | awk '{pri +nt \$2}'`; return (@Policies); } #MAIN My @FailoverPolicies = &ReadPolicies(DBSPI); For (my $i=0; $i < @FailoverPolicies; $i++) { my $cmd "/opt/OV/bin/opctemplate -e" . " " . "$FailoverPolicies[$i]"; my $output= `$cmd`; # here i expect this command read each value from +the array and take action, -e to enable }

      and this works fine but the problem i face is that i see so many <defunct> process on system and i think it is because first command is not completed and second also start and so one and one point this hangs.

      What can i do to ensure 2nd command executes only when first is completed in the loop.

      Thank You.

      -KAKA-