找回密码
 注册
查看: 2303|回复: 0

perl语言中的my 变量的注释

[复制链接]
发表于 2011-11-13 22:29:05 | 显示全部楼层 |阅读模式
这些局部变量可以在任意块中使用,不仅仅是子程序中。例如,可以在if,while,foreach 等块中使用:
foreach (1..10){
my($square) = $_*$_; #本循环中的私有变量
print “$_ squared is $squrare.\n”;
}
变量$square 是私有的,仅在此块中可见;在本例中,此块为foreach 循环块。如果没有大括符({}),它将是整个文件中的
私有变量。到现在为止,你的程序不会超过一个文件,因此不讨论这个问题。只有和它处于一个代码块中的语句才能使用
它。这非常有利于代码的维护,如果$square 值错了,则其被限制在相应的代码段中。有经验的程序员(通常是通过辛苦的
实践)发现将变量的作用域限制在一页,或者几行代码中,能加速开发和测试。
当然,my 操作不会改变赋值参数的context:
my ($num) = @_; #列表context, 同($sum) = @_;
my $num = @_; #标量context,同$num = @_;
在第一个例子中,$num 得到第一个参数,因为其在列表context 中;第二个例子中,将得到参数的个数,因为是在标量context
中。两条语句都可能是正确的;不能仅凭它来判断是否使用错误,因此Perl 不能提示(warning)你,如果你使用错误。(当
然,不能将这两天语句写在同一个子程序中,因为不能在一个作用域内重复定义某个变量)。当读到这样的代码时,可以通
过上下文来判断其context。
记住,如果没有使用括号,my 仅定义一个变量◆:
◆通常,将warning 打开会报告这样使用my,或者你自己调用1-800-LEXICAL-ABUSE 来报告。使用strict pragma(将在后面提及),将会
阻止这类错误的发生。
my $fred, $barney; #错误!没有定义$barney
my ($fred, $barney); #两个均定义了
当然,可以使用my 创建新的,私有数组◆:
◆或者hashes,
my @phone_number;
如果新的变量没被赋值的话:标量变量会自动赋与undef,而数组变量会赋与空列表。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-12-4 01:09 , Processed in 0.021650 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表