Yuan Yijun (bbbush) wrote,
Yuan Yijun

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

  • My tweets

    Wed, 09:34: WIthout threading support, Outlook managed to introduce "Focused" and "Other" as tabs in the inbox. Now I got two inbox to check.

  • My tweets

    Tue, 11:06: With IntelliJ IDEA it is really hard to tell which window is "active" by looking at the taskbar icon. The project n……

  • My tweets

    Sun, 21:01: Scared a little bit https://t.co/MQI4IPzfDa Sun, 22:07: https://t.co/22J8hD4xrp ugly paradise

  • Post a new comment


    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded