跳转到内容

Perlwikibot/3.0 版本发布

来自维基教科书,开放世界中的开放书籍
重要说明
此版本包含重大更改。这些发行说明将指导您完成更新调用代码的过程。

3.0 版本标志着一次重大转变。首先,所有方法都尽可能地使用 API。这意味着在某些情况下返回格式已更改。同样,一些方法调用也已更改。其中一些仍然接受向后兼容的形式;这将在适用时予以说明。

重大更改

[编辑 | 编辑源代码]

所有方法

[编辑 | 编辑源代码]
概述
几乎所有方法现在在失败时返回 undef
基本原理
将错误与返回的数据分开很重要。如果您需要错误代码或错误详细信息,它们分别在 $bot->{'error'}->{'code'}$bot->{'error'}->{'details'} 中可用。
影响
任何未忽略返回值的方法调用现在都必须检查 undef

示例:get_text()get_pages()

[编辑 | 编辑源代码]
概述
这些方法现在为不存在的页面返回 undef,而不是错误代码。
基本原理
如上所述
影响
您处理错误代码的任何特殊情况现在都必须查找 undef。涉及存在页面的调用不受影响。
新调用
my $text = $bot->get_text('Non-existent page');
print $text if defined($text);

my @pages = ('Page 1', 'Page 2', 'Page 3');
my $thing = $bot->get_pages(\@pages);
foreach my $page (keys %$thing) {
    my $text = $thing->{$page};
    print "$text\n" if defined($text);
}
旧调用
my $text = $bot->get_text('Non-existent page');
print $text unless ($text eq "2");

my @pages = ('Page 1', 'Page 2', 'Page 3');
my $thing = $bot->get_pages(\@pages);
foreach my $page (keys %$thing) {
    my $text = $thing->{$page};
    print "$text\n" unless ($text eq "2");
}


概述
此方法现在在成功时返回 true;失败时返回 false。
基本原理
在 Perl 中,非零为 true,表示成功。即使 Perl 中的系统调用包装也遵循此约定。
影响
login() 的所有调用都需要更新检查返回值的部分。
新调用
$bot->login({
    username => "Mike's bot account",
    password => $password,
}) or die "Couldn't log in";
旧调用
my $failure = $bot->login("Mike's bot account", $password);
die "Couldn't log in" if $failure;


linksearch()

[编辑 | 编辑源代码]
概述
此方法现在使用键 'url' 和 'title'
基本原理
这减少了在程序员希望使用回调钩子进行增量处理的情况下出现的混淆。没有此更改,访问数据将使用两组不同的键完成。
影响
任何调用都需要更新键名。
新调用
my $options = { max => 10, }; # I only want some results
my @links = $bot->linksearch("slashdot.org", 1, undef, $options);
foreach my $hash (@links) {
    my $url = $hash->{'url'};
    my $page = $hash->{'title'};
    print "$page: $url\n";
}

# Use a callback:
my $options = { hook => \&mysub, }; # I want to do incremental processing
$bot->linksearch("slashdot.org", 1, undef, $options) or die;
sub mysub {
    my ($res) = @_;
    foreach my $hashref (@$res) {
        my $url   = $hashref->{'url'};
        my $title = $hashref->{'title'};
        print "$title: $url\n";
    }
}
旧调用
my @links = $bot->linksearch("slashdot.org", 1) or die;
foreach my $hashref (@links) {
    my $link = $hashref->{'link'};
    my $page = $hashref->{'page'};
    print "$page: $link\n";
}


[编辑 | 编辑源代码]
概述
此方法现在使用键 'title' 和 'redirect'。它还仅返回链接(包括重定向)。list_transclusions() 处理转包。
基本原理
这减少了在程序员希望使用回调钩子进行增量处理的情况下出现的混淆。没有此更改,访问数据将使用两组不同的键完成。
影响
对该方法的任何调用都需要评估是否需要用 list_transclusions() 的调用替换或补充。此外,键名必须更新。
新调用
my @links = $bot->what_links_here("Meta:Sandbox", undef, 1, {hook=>\&mysub});
sub mysub{
    my ($res) = @_;
    foreach my $hash (@$res) {
        my $title = $hash->{'title'};
        my $is_redir = $hash->{'redirect'};
        print "Redirect: $title\n" if $is_redir;
        print "Page: $title\n" unless $is_redir;
    }
}
旧调用
# dunno


其他更改

[编辑 | 编辑源代码]

...

华夏公益教科书