2008年6月20日星期五

To run subroutines from hash(通过hash执行函数)

这个问题是出现在network programming里面,类似代码如下


#!/usr/local/bin/perl -w
use strict;
use constant TEST=>1;
sub test{
print "test\n"
}

my %COMMAND = (TEST()=>\&test);

$a = 1;
$COMMAND{$a}->();

这样通过hash可以运行对应的程序,为什么要在TEST后面添加()呢?
这样做的原因是如果不添加(),perl会不知道你需要的是TEST这个字符串还是它代表的意义,而加上就知道是TEST这个函数的返回值,其实就是定义的constant,这样就消除了岐义。


http://perldoc.perl.org/perlop.html#Comma-Operator
也有提到,=>左边会强制当做字符对待

没有评论: