2015-11-18 1 views
1

Pourquoi ai-je cette erreur? server_port() fonctionne comme prévu, afaik REMOTE_PORT est aussi une variable d'environnement valide.Sous-programme non défini CGI :: remote_port

Existe-t-il d'autres moyens d'obtenir le numéro de port du client?

Voici mon code complet:

#!/usr/bin/perl -w 
    use CGI qw(:all); 
    use CGI::Carp qw(fatalsToBrowser); 
    use strict; 
    use Cwd; 
    ################################# 

my $time = localtime(); 
my $dir = cwd(); 
my $parameter = param('name'); 

my $q = new CGI; 
my $addr = $q->remote_host(); 
my $request = $q->request_method(); 
my $port = $q->server_port(); 


print "Content-type:text/html\r\n\r\n"; 
print '<html>'; 
print '<head>'; 
print '<title>Auth2</title>'; 
print '</head>'; 
print '<body>'; 
print "<h1> The time is $time </h1>"; 
print "<p> Current directory is $dir</p>"; 
print "<p> Request parameter: $parameter</p>"; 
print "<p> Remote address: $addr</p>"; 
print "<p> Remote port: $port</p>"; 
print "<p> Request method: $request </p>"; 
print '</body>'; 
print '</html>'; 


1; 
+1

S'il vous plaît lire [CGI :: Alternatives] (https://metacpan.org/pod/CGI:Alternatives) et apporter votre programmation web Perl dans le 21ème siècle :-) –

Répondre

4

Les méthodes disponibles sont documentées dans le man page et il semble que remote_port n'est pas un d'entre eux.

afaik REMOTE_PORT est également une variable d'environnement valide.

Si elle est une variable d'environnement, vous pouvez simplement y accéder comme un:

my $port = $ENV{REMOTE_PORT}; 

En dehors de cela, il ne sait pas pourquoi vous avez besoin du numéro de port distant du tout, car il sera probablement tout simplement être un nombre arbitraire de la plage de port éphémère du système distant. C'était peut-être aussi le raisonnement de ne pas fournir une méthode pour y accéder.