加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Learning Perl: 4.5. Private Variables in Subroutines

发布时间:2020-12-15 20:56:38 所属栏目:大数据 来源:网络整理
导读:? 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 acc

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读