2010-10-28 6 views
1

Erreur:Code Finger en perl - Pas en mesure d'exécuter

Erreur de syntaxe: fin de fichier inattendu

Voici le code

J'ai changé.

"#!/usr/local/bin/perl" 

Le programme actuel est

#!/local/perl5/bin/perl5.003 

use Socket; 

$sockaddr = 'S n a4 x8'; 

$host = $ARGV[0]; 
$them = $host; 
$port = 79; 
print "Finger $host: \n"; 
$hostname = ``; 
`nslookup $host |grep Name: >> $test`; 
print $test; 
#($name, $aliases, $proto) = getprotobyname('tcp'); 

($name, $aliases, $port) = getservbyname($port, 'tcp') unless $port =~ /^\d+$/; 
($name, $aliases, $type, $len, $thisaddr) = gethostbyname($hostname); 
$n1 = $name; 
($name, $aliases, $type, $len, $thataddr) = gethostbyname($them); 

$this = pack($sockaddr, &AF_INET, 0, $thisaddr); 
$that = pack($sockaddr, &AF_INET, $port, $thataddr); 

socket(S, &PF_INET, &SOCK_STREAM, $proto) || die "socket: $!"; 

bind(S, $this) || die "bind: $!"; 
connect(S, $that); 

select(S); $| = 1; select(stdout); 

print S "\n\n"; 

while (<S>) {print $_;}; 
+0

Pour formater votre code, sélectionnez-le et appuyez sur CTRL · K dans la zone d'édition. pour des questions futures. – Benoit

+0

merci ... veillera à ce que la prochaine fois – AAA

+0

Ne pouvez-vous pas utiliser quelque chose de mieux que perl 5.003? Il a été publié en 1996. Quant aux problèmes dans le code, $ test et $ proto ne sont jamais initialisés (proto est commenté) et la chose globale semble instable. Avez-vous essayé "perl -w foo.pl hostname" et "perl -d foo.pl hostname"? dans le débogage, utilisez "n" pour exécuter la ligne suivante et "print $ this" ou "x @that" pour rechercher. –

Répondre

2

ici:

`nslookup $host |grep Name: >> $test`; 

$test n'est pas défini à ce moment-là, vous vous demandez le shell d'exécuter nslookup whatever.com |grep Name: >>. Où est la coque censée rediriger la sortie?

Si vous définissez $test être quelque chose, comme un nom de fichier .. ou même $test = "$host.txt"; il vous ira plus loin.

Rien à voir avec votre version de Perl, bien que le fait d'être capable de use strict;use warnings est utile, car il aurait attrapé l'erreur ci-dessus.

Questions connexes