Pero es que no sabemos qué quieres hacer en la línea 64...
¿Se trata, simplemente, de saber si $epass contiene algo?
Si solo es eso, la solución es sencilla:
Using perl Syntax Highlighting
if ( length($epass) > 3 ) {
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
He puesto '3', porque en la expresión regular se necesitan al menos 3 caracteres, para que funcione (tampoco sabemos cómo son los datos que estamos tratando).
¿No podrías poner un ejemplo de la entrada?
P.D.:
he encontrado otro ejemplo de desempaquetado de las password 7 de Cisco.
P.P.D.: Vale,
ya encontré el código original:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
# $Id: cisco.passwords.html 27902 2012-12-10 01:32:13Z fyodor $
#
# for Cisco IOS password encryption facts.
#
# Use for any malice or illegal purposes strictly prohibited!
#
@xlat = ( 0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f, 0x41,
0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72, 0x6b, 0x6c,
0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53 , 0x55, 0x42 );
while (<>) {
if (/(password|md5)\s+7\s+([\da-f]+)/io) {
if (!(length($2) & 1)) {
$ep = $2; $dp = "";
($s, $e) = ($2 =~ /^(..)(.+)/o);
for ($i = 0; $i < length($e); $i+=2) {
$dp .= sprintf "%c",hex(substr($e,$i,2))^$xlat[$s++];
}
s/7\s+$ep/$dp/;
}
}
print;
}
# eof
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Ahí sí que está bien puesto el if(), porque está comprobando si es par la cadena que ha capturado en la expresión regular anterior, que es bastante fuerte, y solo se queda con la cadena hexadecimal que sigue al '7'.
Entonces, en tu código: no vemos cómo extraer las contraseñas, pero supongo que será algo parecido. Si te salen errores es porque hay algún valor 'undef' demás en el
array. Lo puedes obviar con un
Using perl Syntax Highlighting
if ( defined $epass ) {
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
y asumimos que en el
array has capturado bien todas las contraseñas.