Esta es una de las muchas formas de hacerlo:
Código:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my %direccion_real_del;
while (<>) {
chomp;
my($usuario,$direccion) = split ';';
if ($usuario !~ /Alias de (.+)/) {
$direccion_real_del{$usuario} = $direccion;
}
else {
$usuario = $1;
print "$direccion_real_del{$usuario};$direccion\n"
# if $direccion_real_del{$usuario};
;
}
}
En vez de buscar si el user2 está contenido en la cadena user1, miramos justo lo contrario: que no contenga "Alias de ". Entonces sabemos que es una línea que muestra el $usuario y su dirección, así que las guardamos en el diccionario.
En cambio, si sí es un alias, sacamos el $usuario del primer par de paréntesis de captura de la expresión regular ($1) y (suponemos que ya la conocemos y por eso) pintamos su dirección real junto con la del alias.
Tiene la ventaja de que recuerda las direcciones reales de todos los usuarios, por si las líneas del fichero de entrada aparecen mezcladas.