Mastodon::Listener:1 at/home/sergio/perl5/lib/perl5/Role/EventEmitter.pm第21行

Mastodon::Listener:1 at/home/sergio/perl5/lib/perl5/Role/EventEmitter.pm第21行,perl,bots,Perl,Bots,我从中复制了以下示例代码,但它不起作用: #!/usr/bin/env perl use strict; use warnings; use Mastodon::Client; my $client = Mastodon::Client->new( instance=>'mastodon.cloud', name=>'Perl watcher', client_id=>'<myid>', client_secret=>'

我从中复制了以下示例代码,但它不起作用:

#!/usr/bin/env perl
use strict;
use warnings;
use Mastodon::Client;

my $client = Mastodon::Client->new(
    instance=>'mastodon.cloud',
    name=>'Perl watcher',
    client_id=>'<myid>',
    client_secret=>'<mysecret>',
    access_token=>'<mytoken>',
    coerce_entities=>1
) or die "Cannot connect";
my $listener = $client->stream( 'public' );
$listener->on( update => sub {
    my ($listener, $status) = @_;
    printf "%s said: %s\n",
        $status->account->display_name,
        $status->content;
});
$listener->start;
^ROLE\u EVENTEMITTER\u DEBUG=1v perl-d:maintostodon.pl

Mastodon::Listener:1位于/home/sergio/perl5/lib/perl5/Role/EventEmitter.pm第21行。
Role::EventEmitter::emit(Mastodon::Listener=HASH(0x55d97ff65e90),“错误”,1,“在\@INC中找不到IO/Async/SSL.pm(您可能需要在/home/sergio/perl5/lib/perl5/Mastodon/Listener.pm行172处安装”…,数组(0x55d980399a10))
Mastodon::Listener::uuu ANON_uu[/home/sergio/perl5/lib/perl5/Mastodon/Listener.pm:173](代码(0x55d97fdca288),Mastodon::Listener=HASH(0x55d97ff65e90),“错误”,1,“无法在\@INC中找到IO/Async/SSL.pm(您可能需要安装“…,数组(0x55d980399a10)),在(eval400)[/home/sergio/perl5/lib/perl5/Class/Method/Modifiers.89]第1行调用
Mastodon::Listener:::(eval 400)[/home/sergio/perl5/lib/perl5/Class/Method/Modifiers.pm:89]:1](Mastodon::Listener=HASH(0x55d97ff65e90),“error”,1,“在\@INC中找不到IO/Async/SSL.pm(您可能需要安装“…,数组(0x55d980399a10)),在(eval 402)[/home/sergio/perl5/lib/perl5/Class/Method/Modifiers.pm:148]第2行调用
Mastodon::Listener::emit(Mastodon::Listener=HASH(0x55d97ff65e90),“错误”,1,“在\@INC中找不到IO/Async/SSL.pm(您可能需要在/home/sergio/perl5/lib/perl5/Mastodon/Listener.pm第86行安装“…,数组(0x55d980399a10))
Mastodon::Listener::uu ANON_uu[/home/sergio/perl5/lib/perl5/Mastodon/Listener.pm:86](未定义,未定义,数组(0x55d980399ae8))在/home/sergio/perl5/lib/perl5/Mastodon/Listener.pm第94行调用
Mastodon::Listener::uu ANON_uu[/home/sergio/perl5/lib/perl5/Mastodon/Listener.pm:94](未定义)在/home/sergio/perl5/lib/perl5/Net/Async/HTTP.pm第905行调用
Net::Async::HTTP:::u ANON_uu[/home/sergio/perl5/lib/perl5/Net/Async/HTTP.pm:906](“在\@INC中找不到IO/Async/SSL.pm(您可能需要安装“…”),调用/home/sergio/perl5/lib/perl5/Future.pm行1008)
Future::在/home/sergio/perl5/lib/perl5/Net/Async/HTTP.pm第906行调用时失败(Future=HASH(0x55d98037b678),代码(0x55d98037af88))
Net::Async::HTTP::do_请求(Net::Async::HTTP=HASH(0x55d97ff65ef0),“uri”https://mastodon.cloud/api/v1/streaming/public在/home/sergio/perl5/lib/perl5/Mastodon/Listener.pm第146行调用“,”头文件“,”散列文件(0x55d980399a70),“on_错误”,代码(0x55d980399ab8),”on_头文件“,…)
在Mastodon.pl第21行调用的Mastodon::Listener::start(Mastodon::Listener=HASH(0x55d97ff65e90))
如果我在错误文件
/home/sergio/perl5/lib/perl5/Role/EventEmitter.pm
第21行中将
$\u0]
更改为
$\u1]
,并安装了缺少的库IO::Async::SSL,我会得到:

--在Mastodon::Listener(0)中发出错误
Mastodon::Listener:解码JSON有效负载时出错:引用bless(do{\(my$o=0)},'JSON::PP::Boolean')未在/home/sergio/perl5/lib/perl5/Mastodon/Types.pm第83行传递类型约束“Bool”(在$args->{“locked”})
引用bless(do{\(my$o=0)},'JSON::PP::Boolean')未传递类型约束“Bool”(在$args->{“locked”})
“Bool”的定义是:(Type::Tiny::XS::Bool($)

不幸的是,Role::EventEmitter默认情况下隐藏了该错误的详细信息。至少
perl-d:Fancy
在堆栈跟踪中显示了有用的信息

否则,您可以通过注册
错误处理程序来恢复错误消息:

use Data::Dumper;
...
$listener->on( error => sub {
    my ($is_fatal, $message, $details) = @_;
    die "error ($is_fatal): $message\n" . Dumper($details);
});
实际的错误消息

在@INC(@INC包含:…)中找不到IO/Async/SSL.pm
只是意味着你需要安装模块


…没有通过类型约束“Bool”(在$args->{“locked”})中)
错误看起来像是这样的。有一个,但它还没有进入正式的Mastodon::Client版本


一种可能的解决方法可能是将Type::Tiny降级到1.003002或更低版本。

不幸的是,Role::EventEmitter在默认情况下隐藏了该错误的详细信息。至少
perl-d:Commission
在堆栈跟踪中显示了有用的信息

否则,您可以通过注册
错误处理程序来恢复错误消息:

use Data::Dumper;
...
$listener->on( error => sub {
    my ($is_fatal, $message, $details) = @_;
    die "error ($is_fatal): $message\n" . Dumper($details);
});
实际的错误消息

在@INC(@INC包含:…)中找不到IO/Async/SSL.pm
只是意味着你需要安装模块


…没有通过类型约束“Bool”(在$args->{“locked”})中)
错误看起来像是这样的。有一个,但它还没有进入正式的Mastodon::Client版本


一个可能的解决方法可能是将Type::Tiny降级到1.003002或更低版本。

如果在
角色下运行脚本,您会得到什么输出?
?另外,您从
perl-d:坦白script.pl
中得到什么?@melpomene我想我找到了错误谢谢您的帮助现在我得到了其他错误…啊。这太愚蠢了默认情况下,hat
Role::EventEmitter
隐藏错误详细信息。您可能希望报告更改为打印
@
的功能请求,而不仅仅是
$[0]
。如果在
角色\u EVENTEMITTER\u DEBUG=1
下运行脚本,您会得到什么输出?另外,从
perl-d:坦白脚本.pl
?@melpomene我想我找到了错误。感谢您的帮助,现在我得到了其他错误…啊。
角色::EVENTEMITTER
默认情况下隐藏错误详细信息是愚蠢的。您可能需要要报告更改为打印
@
而不是仅打印
$的功能请求[0]
。当我安装IO::Async::SSL时,我收到另一个错误,说JSON负载无法解码。这是一个问题,只是为了向读者指出。将Mastodon Client升级到最新版本效果很好,感谢您的帮助和我问题中的正确输入。错误事件定义为以某种方式处理:第一个值(在invocant之后)是错误消息。这是必需的,因为Perl只在stri中工作