2014-08-28 138 views
1

根據papertype的條件,我將如何範圍爲該變量?在變量範圍內的Perl變量

我已經嘗試了幾種方法,我得到的錯誤,我很困惑。

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; 
} 

回答

6

你必須聲明它在你想使用它的塊。如果你聲明它的ifelse塊內,它只會存在那裏。塊結束時變量將被銷燬。

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

非常感謝你。 – 2014-08-28 15:51:53

+0

或者你也可以在循環之外做'my $ url = $ somethingelse;'並且如果條件成立就改變它。 – Sobrique 2014-08-28 16:01:21

+0

@Sobrique爲什麼自相矛盾,讓電腦做額外的工作? – amphetamachine 2014-08-28 16:05:07

4

使用Conditional Operator初始化的變量,而不需要一個if塊:

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

也謝謝你。 – 2014-08-28 16:06:51