2010-12-06 4 views
0

Je pense que c'est une question perl très basique mais je ne la comprends pas. J'utilise le package LWP :: UserAgent pour générer une requête de publication dans le script Perl. Le code est le suivant:Comment passer une paire nom-valeur en tant qu'argument en Perl

my $urlStr = "http://localhost/testproj/AServlet"; 
my $postDataStr = "{name => \'ankur434\'}"; 
my $response = $ua->post($urlStr, $postDataStr); 

Le code ci-dessus ne fonctionne pas & donne erreur suivant -

<Dec 6, 2010 3:15:54 PM IST> <Error> <HTTP> <BEA-101215> <Malformed Request "/testproj/AServlet". Request parsing failed, Code: -1> 

Cependant quand je passe directement la valeur de postDataStr pour poster méthode, il fonctionne parfaitement bien, comme ci-dessous:

my $response = $ua->post($urlStr, {name => 'ankur434'}); 

J'ai essayé quelques options pour fuir {avec barre oblique inverse (\ {), mais rien ne fonctionnait ...

Quelqu'un peut-il suggérer quelque chose? Merci!

+1

erreur suivante ......? – musiKk

Répondre

6
{name => 'ankur434'} 

est une référence de hachage.

"{name => \'ankur434\'}" 

est, comme l'indique le nom de votre variable, une chaîne. Perl ne convertit pas automatiquement ce dernier en premier. Vous semblez avoir l'impression qu'en Perl, seules les chaînes peuvent être affectées à des variables ou transmises à des sous-programmes. Ce n'est pas le cas. Il suffit d'utiliser

my $urlStr = "http://localhost/testproj/AServlet"; 
my $postData = {name => 'ankur434'}; 
my $response = $ua->post($urlStr, $postData); 
+0

Merci. Ça a marché. Merci beaucoup! –

+0

Salut, j'ai une autre question connexe. Je dois passer une variable de chaîne dans la référence de hachage. C'est comme: my $ tempStr = ''; my $ anotherTempStr = {$ tempStr}; Ça ne marche pas. Que puis-je faire? Je googling mais pas encore trouvé de solution. Merci. –

+0

Ne vous inquiétez pas. J'ai découvert. Après aidé - sub foo { mon $ hash_ref; $ hash_ref -> {'key1'} = 'valeur1'; $ hash_ref -> {'key2'} = 'valeur2'; $ hash_ref -> {'key3'} = 'valeur3'; return $ hash_ref; } mon $ hash_ref = foo(); –

Questions connexes