为什么下面的代码中缺少哈希值



我想对jira和jfrog进行POST请求。当我试图在循环中获取哈希值时,第二次无法获取该值。我尝试从env读取变量(API令牌而不是密码(,如果未设置,它将传递用户名和密码。

my %urls = (
'jira' => {
'url' => 'https://jira.com:123/rest/api/2/issue/', 
'token' => 'JIRA_TOKEN'
},
'jfrog' => {
'url' => 'https://jfrog.com/artifactory/api/storage/path/to/artifacts',
'token' => 'JFROG_TOKEN'
}
);
my $jira_ua = Mojo::UserAgent->new();
for my $outer_elem ( keys %urls ) {
for my $inner_elem ( keys %{$urls{$outer_elem}} ) {
# print $inner_elem;
if ( !$ENV{$urls{$outer_elem}{'token'}} ) {
print "Enter username : n";
my $username = <STDIN>;
chomp($username);
my $passwd = read_password("Enter Password: ");
$url = Mojo::URL->new($urls{$outer_elem}->{'url'})
->userinfo($username.':'.$passwd);
}
else {
if ( $inner_elem eq "jira" ) {
$tx->req->headers->authorization (
"Bearer $ENV{$urls{$outer_elem}->{'token'}}"
);
$url = Mojo::URL->new($urls{$outer_elem}->{'url'})
}
}
print $outer_elem . "n";
print "logging in to $urls{$outer_elem}->{'url'}n";
$tx = my $ua->get($url); # <--- line 170
my $res = $tx->res->code;
print $res;
last;
}
}

我得到低于输出

D:scripts>perl emtf.pl
jira
Can't call method "get" on an undefined value at emtf.pl line 170.

您得到的错误是:

无法调用方法"得到";关于未定义值

生成错误的代码行是:

$tx = my $ua->get($urls{$outer_elem}->{'url'});

当您尝试调用get()方法时,错误意味着$ua包含undef。这是因为您在这行代码上创建了一个名为$ua的新变量,my就是这样做的。因为没有给这个新变量赋值,所以它将包含undef

我不知道my为什么在那里。我不确定我是否真的理解你的代码应该如何工作。还有另一个名为$ua的变量,它已定义,但未在上面几行定义的匿名子例程(my( $ua, $tx ) = @_;(中使用,但该变量不存在于该子例程之外。

你的意思是用$jira_ua代替吗

$tx = $jira_ua->get($urls{$outer_elem}->{'url'});

最新更新