Pues no construye la cadena bien. Lo he probado de las dos formas que me has dicho y en ambas la cadena que imprime es:
@OC' 'UID' 'FEC''TIE' '@OD''@OR''@OR' '@OP''
Es decir, entre nombre de campo y nombre de campo un par de comillas simples y no el contenido del campo. Y me sigue devolviendo los mismos avisos de:
Possible attempt to separate words with commas at ./pfinal.pl line 87.
Use of uninitialized value in string at ./pfinal.pl line 120, <> line 1.
Use of uninitialized value in string at ./pfinal.pl line 121, <> line 1.
Use of uninitialized value in string at ./pfinal.pl line 122, <> line 1.
Use of uninitialized value in string at ./pfinal.pl line 123, <> line 1.
Use of uninitialized value in string at ./pfinal.pl line 124, <> line 1.
Use of uninitialized value in string at ./pfinal.pl line 125, <> line 1.
Use of uninitialized value in string at ./pfinal.pl line 126, <> line 1.
Use of uninitialized value in string at ./pfinal.pl line 127, <> line 1.
Pongo aqui tambien el bucle tal y como esta ahora mismo por si sirve de ayuda:
- Código: Seleccionar todo
if ($primero eq '$')
{
##print "Entro en el bucle 1";
my $uid = substr($linea, 1, 5);
my $sth2=$dbh1->prepare("SELECT orden FROM ordenes_3 WHERE destino_orden='$uid' AND ack_orden='0'")
or die $dbh1->errstr;
$sth2->execute() or die $sth2->errstr;
my @orden;
while (@orden=$sth2->fetchrow_array())
{
next unless $orden[0];
my $orden = '$';
$orden .= '@OC' . "'$orden[6]'";
$orden .= 'UID' . "'$orden[4]'";
$orden .= 'FEC' . "'$orden[2]'";
$orden .= 'TIE' . "'$orden[3]'";
$orden .= '@OD' . "'$orden[5]'";
$orden .= '@OT' . "'$orden[6]'";
$orden .= '@OR' . "'$orden[7]'";
$orden .= '@OP' . "'$orden[8]'";
##my @oi = qw( 6 4 2 3 5 6 7 8);
##my @ot = qw( @OC UID FEC TIE @OD @OT @OR @OP );
##next unless $orden[0];
##my $orden = '$' . join(' ', map{"$ot[$_]'$orden[$oi[$_]]'"} 0..$#oi);
print "$orden\n";
}
}
Dependiendo de si quiero probar una forma u otra le quito los comentarios a una y los pongo en la otra.