Yuan Yijun (bbbush) wrote,
Yuan Yijun
bbbush

our, local, my

多谢 Hellwolf 说到黑豹书, http://www.unix.org.ua/orelly/perl/advprog/ch03_01.htm

这两天一直抱着打印的几张骆驼书, http://www.pgsqldb.org/mwiki/index.php/ProgrammingPerl  看了又看,就是搞不清为什么我 my $a = 1, *b = *a 什么都拿不到。 Hellwolf 说,“这里面的问题是 my 声明的变量没有typeblobs”。(刚才又试,才知道 a 和 b 都必须预先用 our 声明好,因为那个表达式是有两个 blobs 的。不声明 our $b 的话,记得书上说会创建一个匿名引用(?),却没办法使用 $b,也不会自动创建 %b 或者 @b)

书上说,“local operator does not create new variable”。local 可以改变全局变量的值,却不改变全局变量的作用域,因此被调用的函数都可以看到改变后的值。我想倒是可以把 local 理解成 xslt2 的参数传递管道。这种东西是很方便的呀。和 xslt 的 single assignment 不一样,用 local 可以在同一个函数里多次改变全局变量的值,这里肯定容易出错。

use strict 是必需的,不然不加修饰的变量默认是 our 声明的。用了 strict 之后,所有变量要么是 my,要么就是 our 了。在函数中的 our 不会自动进入被调用函数的词法范围,必须在那里再用 our 声明一次,所以不好用。
Tags: perl
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments