Perl变量在sub中的作用域

时间:2014-08-28 15:47:59

标签: perl scope

我如何根据papertype的条件来确定此变量的范围?

我已经尝试过几种方式而且我遇到了错误,我感到很困惑。

sub paperdisplay_getPaperLink {
    my ( $self, $args ) = @_;
    my $paper    = $args->{paper};
    my $linktext = $args->{linktext};
    my $session  = $args->{session};

    my $query    = $self->request;
    my $password = $query->param('password');

    if ( $paper->{Type} eq 'Break' ) {
        my $url = $something;
    } else {
        my $url = $somethingelse;
    }

    my $link = qq(<a title="$linktext" target="other" href="$url">$linktext</a>);

    return $link;
}

2 个答案:

答案 0 :(得分:6)

您必须在要使用它的块中声明它。如果您在ifelse块中声明它,它将只存在于那里。当块结束时,该变量将被销毁。

my $url;
if ($paper->{Type} eq 'Break') {
    $url = $something
} else {
    $url = $somethingelse
}
# $url still exists down here

答案 1 :(得分:4)

使用Conditional Operator初始化变量而无需if块:

my $url = $paper->{Type} eq 'Break'
    ? $something
    : $somethingelse;