【问题标题】:How to pass optional parameters in Perl? (For a beginner)如何在 Perl 中传递可选参数? (对于初学者)
【发布时间】:2018-05-10 23:01:04
【问题描述】:

我读过http://www.perl101.org/subroutines.html,但我就是不明白可选参数。

我想拨打PDF::API2 中的following sub。文档说“-indent”是一个选项。我究竟如何传递一个缩进 20 的参数?

这是我目前正在传递的内容:

$txt->section($str, $contentwidth,$heightmax);

这是子

sub section {
    my ($self,$text,$width,$height,%opts)=@_;
    my $overflow = '';

    foreach my $para (split(/\n/,$text)) {
        if(length($overflow) > 0) {
            $overflow .= "\n" . $para;
            next;
        }
        ($para,$height) = $self->paragraph($para,$width,$height,%opts);
        $overflow .= $para if (length($para) > 0);
    }
    if (wantarray) {
        return ($overflow,$height);
    }
    return $overflow;
}

【问题讨论】:

    标签: perl subroutine


    【解决方案1】:
    my ($self, $text, $width, $height, %opts) = @_;
    

    %opts 提供了它。您需要传递一个键值对列表。但它不是参考,只是可选的附加值。

    $self 由 Perl 为您插入。然后你就得到了你已经传递的三个强制参数。之后就是选项了。

    $obj->section( $text, $width, $height, -indent => 1 );
    

    将这些选项分配给%opts 的方式会将高度之后的所有剩余参数吞入该哈希中,并将稍后传递给$self->paragraph

    只要确保它总是成对的值。

    【讨论】:

    • 感谢@Borodin 的编辑。这是我晚上用手机写的。
    • @vanHoesel 您的编辑实际上还不错。我会接受一些。谢谢。
    • 太好了,谢谢!我没有意识到连字符也应该在那里。
    • @Yvonne 这是在这里学到的宝贵经验。在编程中,每个角色都很重要。没有近似值。事情要么正确,要么不正确。大多数情况下缺少分号,但这种东西在这里很容易找到,尤其是当您的语言像 Perl 一样宽容时。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2014-06-03
    相关资源
    最近更新 更多