Hi,
I have a strange problem with arrays in Perl.
That is to say, for me it is strange and perhaps there is a special reason for it that I do not know of.
Not a real Perl Ace.
This is the program, as an example:
#!/usr/bin/perl -w #-d
use strict;
my $pu;
my $pu_list_cmd;
my @pu_list = (
"PU_0001",
"PU_0002",
"PU_0003",
"PU_0004",
"PU_0005");
printf "pu_list at the beginning: @pu_list\n";
foreach (@pu_list) {
$pu = $_;
printf "$pu\n";
printf "pu_list in foreach loop: @pu_list\n";
} # End of foreach loop
printf "pu_list at the end: @pu_list\n";
printf "\n\n";
printf "pu_list at the beginning: @pu_list\n";
foreach (@pu_list) {
$pu = $_;
$pu_list_cmd = "echo \"$pu applied\"";
printf "$pu";
open (CMD, '-|', "$pu_list_cmd");
while (<CMD>) {
chomp;
if ( /applied$/ ) {
printf " ... OK.\n";
} elsif ( /ERROR: There is no PU/ ) {
printf " ... not installed.\n";
}
} # End of while loop
close (CMD);
printf "pu_list in foreach loop: @pu_list\n";
} # End of foreach loop
printf "pu_list at the end: @pu_list\n";
The output:
pu_list at the beginning: PU_0001 PU_0002 PU_0003 PU_0004 PU_0005
PU_0001
pu_list in foreach loop: PU_0001 PU_0002 PU_0003 PU_0004 PU_0005
PU_0002
pu_list in foreach loop: PU_0001 PU_0002 PU_0003 PU_0004 PU_0005
PU_0003
pu_list in foreach loop: PU_0001 PU_0002 PU_0003 PU_0004 PU_0005
PU_0004
pu_list in foreach loop: PU_0001 PU_0002 PU_0003 PU_0004 PU_0005
PU_0005
pu_list in foreach loop: PU_0001 PU_0002 PU_0003 PU_0004 PU_0005
pu_list at the end: PU_0001 PU_0002 PU_0003 PU_0004 PU_0005
pu_list at the beginning: PU_0001 PU_0002 PU_0003 PU_0004 PU_0005
PU_0001 ... OK.
Use of uninitialized value in join or string at ./ej.pl line 42.
pu_list in foreach loop: PU_0002 PU_0003 PU_0004 PU_0005
PU_0002 ... OK.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
pu_list in foreach loop: PU_0003 PU_0004 PU_0005
PU_0003 ... OK.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
pu_list in foreach loop: PU_0004 PU_0005
PU_0004 ... OK.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
pu_list in foreach loop: PU_0005
PU_0005 ... OK.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
Use of uninitialized value in join or string at ./ej.pl line 42.
pu_list in foreach loop:
Use of uninitialized value in join or string at ./ej.pl line 45.
Use of uninitialized value in join or string at ./ej.pl line 45.
Use of uninitialized value in join or string at ./ej.pl line 45.
Use of uninitialized value in join or string at ./ej.pl line 45.
Use of uninitialized value in join or string at ./ej.pl line 45.
pu_list at the end:
Can someone explain why my array is being emptied in the second foreach loop ?
Thanks in advance,
E.J.