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

  • 2020

    Last time I wrote a review was in 2018, about 2017. Or maybe I wrote something elsewhere, maybe on Twitter? It was hard to write something freely…

  • Shutdown application context

    Recent technical issue at work involves how a sprint-boot application shutdown itself. There are several types of applications we have over here,…

  • Portfolio weighted averages

    Last week I got an assignment to make a small Java library for some often used portfolio calculations. A portfolio is a collection of holdings, each…

  • Post a new comment


    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded