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

Learning Perl: 4.7. Notes on Lexical (my) Variables

发布时间:2020-12-15 20:56:35 所属栏目:大数据 来源:网络整理
导读:? 4.7. Notes on Lexical (my) Variables Those lexical variables can be used in any block,not merely in a subroutine's block. For example,they can be used in the block of an if , while ,or foreach : foreach (1..10) { my($square) = $_ * $_; #

Previous Page

Next Page

?

4.7. Notes on Lexical (my) Variables

Those lexical variables can be used in any block,not merely in a subroutine's block. For example,they can be used in the block of an if,while,or foreach:

    foreach (1..10) {
      my($square) = $_ * $_;  # private variable in this loop
      print "$_ squared is $square./n";
    }

The variable $square is private to the enclosing block; in this case,that's the block of the foreach loop. If there's no enclosing block,the variable is private to the entire source file. For now,your programs aren't going to use more than one source file,so this isn't an issue. But the important concept is that the scope of a lexical variable's name is limited to the smallest enclosing block or file. The only code that can say $square and mean that variable is the code inside that textual scope. This is a big win for maintainabilityif the wrong value is found in $square,the culprit will be found within a limited amount of source code. As experienced programmers have learned (often the hard way),limiting the scope of a variable to a page of code,or to a few lines of code,accelerates the development and testing cycle.

Also,the my operator doesn't change the context of an assignment:

    my($num) = @_;  # list context,same as ($num) = @_;
    my $num  = @_;  # scalar context,same as $num = @_;

In the first one,$num gets the first parameter,as a list-context assignment; in the second,it gets the number of parameters,in a scalar context. Either line of code could be what the programmer wanted; you can't tell from that one line alone,so Perl can't warn you if you use the wrong one. (Of course,you wouldn't have both of those lines in the same subroutine since you can't have two lexical variables with the same name declared in the same scope; this is just an example.) When reading code like this,you can always tell the context of the assignment by seeing what the context would be without the word my.

So long as we're discussing using my( ) with parentheses,remember that without the parentheses,my only declares a single lexical variable:[*]

[*] As usual,turning on warnings will generally report this abuse of my,or you can call 1-800-LEXICAL-ABUSE and report it yourself. Using the strict pragma,which we'll see in a moment,should forbid it outright.

    my $fred,$barney;                # WRONG! Fails to declare $barney
    my($fred,$barney);               # declares both

Of course,you can use my to create new,private arrays as well:[

]

[

] Or hashes,which you'll see in Chapter 6.

    my @phone_number;

Any new variable will start out empty: undef for scalars or the empty list for arrays.

Previous Page

Next Page

(编辑:李大同)

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

    推荐文章
      热点阅读