文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>神秘的local和alias

神秘的local和alias

时间:2009-03-23  来源:Greel

今天看Perl by Example section 11.3,local和alias很不好理解,估计过些天就会忘。    

(The Script)
    #!/usr/bin/perl

1 $colors="rainbow";
2 @colors=("red", "green", "yellow" );
3 &printit(*colors); # Which color is this?

4 sub printit{
5 local(*whichone)=@_; # Must use local, not my with globs

6 print *whichone, "\n"; # The package is main

7 $whichone="Prism of Light"; # Alias for the scalar

8 $whichone[0]="PURPLE"; # Alias for the array

    }
9 print "Out of subroutine.\n";
10 print "\$colors is $colors.\n";
11 print "\@colors is @colors.\n";

Output)
6 *main::colors
9 Out of subroutine.
10 $colors is Prism of Light.
11 @colors is PURPLE green yellow.
 

 

如果把第五行的括号去掉就会出现,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 scalar
my $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;就是一个函数调用。
相关阅读 更多 +
排行榜 更多 +
别惹神枪手安卓版

别惹神枪手安卓版

冒险解谜 下载
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载