关于perl全局变量



QUOTE:
原帖由 flw 于 2008-12-10 15:39 发表

Perl 里面的包变量就是 C 里面的全局变量。
就是可以在多个文件之间有效的。

Perl 里面的 package variable 和 C 中的 global variable 还是有区别的。


QUOTE:
原帖由 MMMIX 于 2008-12-10 15:56 发表

Perl 里面的 package variable 和 C 中的 global variable 还是有区别的。

啥区别?


QUOTE:
原帖由 flw 于 2008-12-10 15:57 发表

啥区别?

引用/使用的方式。在 C 中 glboal variable 可以直接用名字访问,但是 Perl 中 package 没有 export 的 package variable 就只能用它的全名 $PACKAGE::var_name 访问了。

从实现来说,C 的 global variable 共享一个名字空间,但是 Perl 中的 package variable 却是各有各的名字空间。


QUOTE:
原帖由 MMMIX 于 2008-12-10 16:04 发表

引用/使用的方式。在 C 中 glboal variable 可以直接用名字访问,但是 Perl 中 package 没有 export 的 package variable 就只能用它的全名 $PACKAGE::var_name 访问了。

从实现来说,C 的 global variabl ...

你只要把包变量的全限定名称和 C 的全局变量名看作是一个东西就行了。


QUOTE:
原帖由 flw 于 2008-12-10 16:07 发表

你只要把包变量的全限定名称和 C 的全局变量名看作是一个东西就行了。

这样看也无不可
没想到大家还在这里讨论呵呵,我原来的本意是想自己做个像$ENV{},$^O这样真正意义上的变量,每个程序都可以,估计PERL里好象没有这样的功能,有的就说说呀。


QUOTE:
原帖由 andyxie407 于 2008-12-13 11:23 发表
没想到大家还在这里讨论呵呵,我原来的本意是想自己做个像$ENV{},$^O这样真正意义上的变量,每个程序都可以,估计PERL里好象没有这样的功能,有的就说说呀。

都不知道你想干啥。
不过隐约看得出来似乎你只是在追求一些没有实际意义的东西。


QUOTE:
原帖由 andyxie407 于 2008-12-13 11:23 发表
没想到大家还在这里讨论呵呵,我原来的本意是想自己做个像$ENV{},$^O这样真正意义上的变量,每个程序都可以,估计PERL里好象没有这样的功能,有的就说说呀。

你这是要修改 Perl 解释器 perl 的行为,那很简单,直接改它就完了。

另外,像 %ENV,$^O 这些变量,要么是通过环境获取,要么是编译 perl 时搜集到的信息,它们并不能用来在各个不同的程序之间通信,即使是单向通信。在现代的基于进程的 os 上,一个进程想要给在它结束后启动的进程留一些信息,必须通过一些持续存在的(至少是在接收信息的进程启动之前存在的)的介质,例如文件,例如共享内存。你设想的这种变量的方式根本就无法实现,这不是 Perl 本身的限制,而是 OS 的限制。当然,这种限制也是可以避过的,在一些开发环境中,例如 Smalltalk 的 Squeak,它在退出时会将当前环境的所有状态信息保存在一个文件中,启动时加载这个文件,环境就回到和退出前一样的状态。



QUOTE:
原帖由 flw 于 2008-12-13 11:31 发表

都不知道你想干啥。
不过隐约看得出来似乎你只是在追求一些没有实际意义的东西。

对一些底层的东西没有基本的概念,自然会有一些奇思妙想,这也不足为奇。
用不了全局变量  就用临时文件存 何必那么费劲