4.5. Private Variables in SubroutinesBut 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.
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. |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。