1

我想向 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.
4

1 回答 1

2

你得到的错误是:

无法在未定义的值上调用方法“get”

产生错误的代码行是:

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

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

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

你是不是,也许是指要使用的行$jira_ua

$tx = $jira_ua->get($urls{$outer_elem}->{'url'});
于 2022-02-23T10:34:27.657 回答