微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Learning Perl: 4.5. Private Variables in Subroutines

Previous Page

Next Page

 

4.5. Private Variables in Subroutines

But if Perl can give us a new @_ for every invocation,can't it give us variables for our own use as well? Of course it can.

By default,all variables in Perl are global variables; that is,they are accessable from every part of the program. But you can create private variables called lexical variables at any time with the my operator:

    sub max {
      my($m,$n);       # new,private variables for this block
      ($m,$n) = @_;    # give names to the parameters
      if ($m > $n) { $m } else { $n }
    }

These variables are private (or scoped) to the enclosing block; any other $m or $n is totally unaffected by these two. And that goes the other way,too; no other code can access or modify these private variables by accident or design.[*] You Could drop this subroutine into any Perl program in the world and kNow that you wouldn't mess up that program's $m and $n (if any).[

] Inside the if's blocks,there's no semicolon needed after the return value expression. Though Perl allows you to omit the last semicolon in a block,in practice you omit it only when the code is so simple that you can write the block in a single line.

[*] Advanced programmers will realize that a lexical variable may be accessible by reference from outside its scope but never by name.

[

] Of course,if that program had a subroutine called &max,you'd mess that up.

The subroutine in the prevIoUs example Could be made simpler. Did you notice that the list ($m,$n) was written twice? The my operator can be applied to a list of variables enclosed in parentheses,so it's customary to combine those first two statements in the subroutine:

    my($m,$n) = @_;  # Name the subroutine parameters

That one statement creates the private variables and sets their values,so the first parameter has the easier name $m and the second has $n. Nearly every subroutine will start with a line much like that one,naming its parameters. When you see that line,you'll kNow that the subroutine expects two scalar parameters,which you'll call $m and $n inside the subroutine.

Previous Page

Next Page

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐