我在此代码上尝试了六种左右的变体,除了像Str
这样的硬编码GET => …
之外,我总是遇到此错误。为什么?如何解决并了解它?这是HTTP :: Request代码中的错误吗?
#!/usr/bin/env perl6
use HTTP::UserAgent; # Installed today with panda, for HTTP::Request.
HTTP::Request.new( GET => "/this/is/fine" ).WHICH.say;
# First, check that yes, they are there.
say %*ENV<REQUEST_METHOD>, " ", %*ENV<REQUEST_URI>;
# This and single value or slice combination always errors-
HTTP::Request.new( %*ENV<REQUEST_METHOD>, %*ENV<REQUEST_URI> );
输出具有恒定误差$ env REQUEST_METHOD=GET REQUEST_URI=/ SOQ.p6
HTTP::Request|140331166709152
GET /
Too many positionals passed; expected 1 argument but got 3
in method new at lib/HTTP/Request.pm6:13
in block <unit> at ./SOQ.p6:11
HTTP :: Request来自此程序包-https://github.com/sergot/http-useragent/-谢谢!
尝试
HTTP::Request.new(|{ %*ENV<REQUEST_METHOD> => %*ENV<REQUEST_URI> });
而不是更明显的
HTTP::Request.new( %*ENV<REQUEST_METHOD> => %*ENV<REQUEST_URI> );
如果=>
的左侧不是文字,我们将不会绑定到命名参数。相反,将对对象作为位置参数传递。
要解决此问题,我们构造了一个匿名哈希,该哈希通过前缀|
展平到参数列表中。
作为奖励,这是一些更有创意的方法:
HTTP::Request.new(|%( %*ENV<REQUEST_METHOD REQUEST_URI> ));
HTTP::Request.new(|[=>] %*ENV<REQUEST_METHOD REQUEST_URI> );