+ -
当前位置:首页 → 问答吧 → 请教一个hash取值的语法

请教一个hash取值的语法

时间:2011-04-02

来源:互联网

最近遇到一段代码,关于hash取值的问题,
  1. if (defined $Animal_Hash{Cat_Info}) {
  2.       $Animal_Hash{Cat_Info} =~ /$Animal_Regex_Hash{Cat_Info}/;
  3.       $Animal_Hash{Cat_Type}   = $2;
  4.       $Animal_Hash{Cat_Number} = $3;
  5.       if (defined $4) {
  6.          $Tmp_Cat_Animal_Number = $4;
  7.       }
  8.       if (defined $5) {
  9.          $Tmp_Cat_Animal_Name = $5;
  10.       }
  11.    }
复制代码
上面的代码是一个函数里面的,按理说,上面代码里面的$2,$3,$4,$5等,都应该是传给函数的参数.
比如函数名字是sub1,而我调用函数时给的参数是:par1, par2, par3, par4,par5。
那$2,$3,$4,$5就对应:par2, par3, par4,par5
但是从程序实际运行的情况看,他们都不是par2, par3, par4,par5。

所以想问,根据上面的代码,上面的$2,$3,$4,$5代表什么呢?是perl的什么特殊语法吗?
谢谢~~

作者: s_girl   发布时间: 2011-04-02

$_[1],$_[2],$_[3],$_[4]
对应第 2 3 4 5个参数

作者: mingxw   发布时间: 2011-04-02

还有个作用域问题得考虑

作者: mingxw   发布时间: 2011-04-02

$Animal_Hash{Cat_Info} =~ /$Animal_Regex_Hash{Cat_Info}/;

正则表达式捕获的内容,具体内容要看 $Animal_Regex_Hash{Cat_Info} 了

作者: zhlong8   发布时间: 2011-04-02



QUOTE:
$Animal_Hash{Cat_Info} =~ /$Animal_Regex_Hash{Cat_Info}/;

正则表达式捕获的内容,具体内容要看 $Ani ...
zhlong8 发表于 2011-04-02 17:17



谢谢,我大概明白了~
  1. my %Animal_Regex_Hash = ( Cat_Info   => qr/^((\w{8})\((\d+)\)\s+($String_Cat_Info_a\s+$String_Cat_Info_b?\s=?\s(\d+)|$String_Cat_Info_c=(\w+)))$/i,);
复制代码
那对于这个正则表达式抽取的域是按什么来划分的啊?

作者: s_girl   发布时间: 2011-04-02

括号 () ,你要是不懂这个还是先看下入门的文档,很多例外情况

作者: zhlong8   发布时间: 2011-04-02