Yo veo que @row1 está declarada dentro de la subrutina traerinfo().
Juraría que debería estar declarada fuera de las subrutinas, para que sean conocidas por todas. Me suena que hay una excepción al caso, pero no me acuerdo de cuál era.
Pues eso... la línea 22 debería estar en la línea 1 (antes de).
Por otra parte,
no uses el módulo Switch. Está lleno de errores. Tantos, que ha sido eliminado de los últimas distribuciones de Perl. Es mejor usar el given/when que existe a partir de Perl v5.10.
Se podría hacer así, también:
Using perl Syntax Highlighting
my $dbh = DBI->connect(
"DBI:Pg:dbname=directorio;host=10.16.105.174;port=5432",
"usuario", "contraseña",
);
my @tablas = qw(institucion customer_user); # nombres de las tablas
my @campos = qw(name first_name ); # campos dentro de esas tablas
my $buscamos = 'Pedro';
for(my $i = 0; $i < @tablas; $i++) { # para todas las tablas...
my $sth = $dbh->prepare("SELECT $campos[$i] FROM $tablas[$i] WHERE $campos[$i]=?");
$sth->execute( $buscamos );
my @row = $sth->fetchrow_array;
if (@row) {
print "Resultado: [@row] en $tablas[$i].\n";
last; # salimos del bucle for()
}
}
print "Fin de la búsqueda de [$buscamos].\n";
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4