谁能解释下这句perl中main后面的::。 这个main是什么?

$main::acl_hash_cache{$user,$m}++;

首先你得明白 perl 里面所有的脚本, 包括模组(.pm) 或是主程序 (youscript.pl) 其实都是包 (package).
因此, 你的主程序其实就是一个默认叫做 main 的包.

另一个你要知道的是, 如果我们想从主程序得到另一个包的内容或涵数时, 我们会写成
$output = &some::package::method( $argv );
或者 $someVar = $some::package::value;

实际的应用上, 当一个模组想要改变, 或存取 main 的行为或内容时, 我们就会写成 $main::... &main::.... 例如, 如果我们自建了一个模组, 想改变 die() 的行为时, 可以写成
$main::SIG{__DIE__} = \&mySub ;
这样一来, 只要 main 发生 die() 的事件时, $main 就会将这个 die 的事件交到你的 mySub() 去处理追问

谢谢。我的目录里有很多.pl , .pm 文件。究竟哪个是main呢,我没有找到任何定义。
刚刚接触perl,问个初级的问题。你写的&some::package::method( $argv );里,
some 是什么? 是package的上一级的类吗?

追答

"你的主程序其实就是一个默认叫做 main 的包"
即是 : 当你在 shell 里输入 "perl myscript.pl" 时, myscript.pl 就是 main
你执行那个 script, 那个 script 就是 main
因为在这个 main 里, 你会继续 "动员" 并他的包去完成工作

&some::package::method 只是英文.. 我的意思只是:
$输出 = &某个类::某个子类::某个涵数( $参数 );

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-20
main 是默认的包名,就像当于 C++ 中的最外层的命名空间 "::acl_hash_cache"。

谁能解释下这句perl中main后面的::。 这个main是什么?
首先你得明白 perl 里面所有的脚本, 包括模组(.pm) 或是主程序 (youscript.pl) 其实都是包 (package).因此, 你的主程序其实就是一个默认叫做 main 的包.另一个你要知道的是, 如果我们想从主程序得到另一个包的内容或涵数时, 我们会写成 output = &some::package::method( $argv );或者...

perl的main包在什么位置?
package::main;my $variable;

perl的main包在什么位置?
LINUX+APACHE主要用来是跑PHP的,跑ASP.NET需要在WINDOWS环境里装IIS 由于公司的产品在新的版本中,需要考虑一些新的部署方式,所以又抽空关注了一下.NET跨平台的一些解决方案。虽然Mono Project对基于.NET开发的人来说都不陌生,不过由于Mono是比较狭义的跨平台(因为它是OS级别的)概念。而从广义的角度来...

请教Perl字符串截取并拼接的问题
看你的路径,是unix下编程吧。试一下这条语句。可以在命令提示符下直接执行,然后重定向到另一个文件。perl -ne '$tmp = $_;$tmp =~ s\/^#\\s*include\\s*\\<.*\\\/(.*)\\>\/#include \\<$1\\>\/;print $tmp;' main.cpp > main_new.cpp main_new.cpp 这个文件就是结果文件了 正则表达式...

perl 中$::的含义及用法
in Perl 5 @a::b::c; # a list in Perl 5 %a::b::c; # an associative array or "hash" in Perl 5 &a::b::c; # a function in Perl 5 “::”符号可以认为是与C语言中的“.”相似,而它更像C++中的::类范围操作符。m = 5;sub me { } main::m &main::me ......

如何使用Perl语言在windows下编写图形化窗口程序啊,求大师,最好给个...
perl 的图形有两种玩法, Tk 和 Tkx. Tk 是纯 Perl 的, 但能用的 widget (即那些 button, menu, scrollbar... )比较少; Tkx 则需要你先装有 Tcl\/Tk , 但能用的 widget 比较多. 一个最简单的例子就是 use Tk; # 导入 tk 模组 use strict;my $mw = MainWindow->new; # 创建窗口 ...

perl 网络编程时一个问题 提示 Bareword "SOCK_STREAM" not allowe...
删除你文件中的下面这一行:use strict;这个位置增加下面一行:use Net::Config;

Perl入门教程
一个Perl脚本或程序包含一条或多条语句。这些语句只需直接写在脚本中,而不需要像main()这样的东西作为程序入口。Perl语句以分别结束:print "Hello, world";以星号(#)开始的语句是注释:# This is a comment(这是一条注释)空白字符会被Perl忽略: 1. print 2. "Hello, world" 3. ;……引号里的字符串除外...

在Perl中Require 和 use 的区别
use 在失败时会立即报错并挂掉, require 失败时会无声无息的略过. 所以很多情况下 require 的指令会写成 eval {require Foo::Bar}; die "$@" if ( $@ );use 的必须是模块(package \/ .pm), require 就不一定是模块, 可以 require 另一个 perl script, 使之变成 main的一部份 use 的模块...

perl的问题,急啊~~
正则表达式(Regular Expression)方法可以满足你上面所需的要求。Perl的正则表达式功能十分强大,基本上是常用语言中最强大的。本解使用Perl正则表达式中最基本、最常用的部分。!\/usr\/bin\/perl ans.pl my $file;while (<>){s\/^\\s+$\/\/;$file.=$_};my @data=split\/\\.\/,$file;for (@data){ ...

相似回答