2014-08-28 107 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