神秘的local和alias
时间:2009-03-23 来源:Greel
(The Script) |
如果把第五行的括号去掉就会出现,modification of a read-only value attempted at这样的错误。
*aliasToSymbol表示这个变量是一个指向所有Symbol的alias
5行的@_就是这样一个变量,print @_;得到的结果就是*main::clolors,main模块的所有colors符号。
如果去掉括号,那么*whichone打印出来就是*main::1,而1是个常量,所以会报错。
但是为什么是1这个常量呢???
通常for (@aliasToArray) { $_ += 5; }
$_就是aliasToArray元素的别名。
alias叫做Symbolic References。 更好理解的则是Hard References—Pointers 但是有时候他们声明的太像了 *aliasToScalar=\$scalar; *aliasToArray=\@array; *aliasToHash=\%hash; *aliasToFunc=\&func; 这些都是alias my $arrayptr=\@array; # creates a pointer to an array my $scalarptr=\$scalar; # creates a pointer to a scalarmy $hashptr=\%assoc_array; # creates a pointer to a hash
my $funcptr=\&subroutine; # creates a pointer to a subroutine 这些都是pointers AUTOLOAD是一个特殊的变量,如果一个函数没有定义,则调用AUTOLOAD函数,并且把参数存在$AUTOLOAD变量中。 BEGIN和END都是函数,有点儿类似于一个文件的构造函数和析构函数。 use subs qw(fun1,fun2); 将fun1 fun2通过subs导出到函数列表。这样不需要前置声明,&,()暗示,fun1;就是一个函数调用。