我对这个Perldata例子的理解

时间:2011-12-22 12:37:27

标签: perl

Perldata给出了以下示例。

$field = $query->radio_group(
  name => 'group_name',
  values => ['eenie','meenie','minie'],
  default => 'meenie',
  linebreak => 'true',
  labels => \%labels
);

我对这个例子的理解是,“radio-group”被用作散列“查询”的关键字。这个密钥“radio-group”本身就是一个hashref,包括name ='group_name'等。此外,由“radio_group”标识的这个hashref被分配给$ field。如果我的理解有误,请纠正我。

3 个答案:

答案 0 :(得分:4)

$query->radio_group方法调用

在这个特定示例中,该方法在对象实例 $query上被调用,其中哈希包含给定的键值对。

如下所示:

my %tmp = (
    name => 'group_name',
    values => ['eenie','meenie','minie'],
    default => 'meenie',
    linebreak => 'true',
    labels => \%labels
);

$field = $query->radio_group(%tmp);

应该清楚地表明散列的参数集合是独立的 $query本身。

然后将该方法调用的结果分配给$field

答案 1 :(得分:4)

这是对来自对象$ query的方法“radio_group”的调用。那里没有哈希,只有一堆参数对用逗号和逗号逗号分隔(=>)。来自perlop:

  

=> operator是逗号的同义词,除了它导致它   左操作数如果以字母开头则被解释为字符串   或下划线,仅由字母,数字和下划线组成。   这包括可能被解释为的操作数   运算符,常量,单数V字符串或函数调用。如果在   对此行为有疑问,左操作数可以明确引用。   否则,=>运算符的行为与逗号运算符完全相同   列表参数分隔符,根据上下文。

答案 2 :(得分:0)

这相当于写作:

my %params = (
  name => 'group_name',
  values => ['eenie','meenie','minie'],
  default => 'meenie',
  linebreak => 'true',
  labels => \%labels
);

$field = radio_group( $query, %params );

所以radio_group根本不是哈希键,而是子程序/方法/函数。

告诉标志是:

  • 缺少[]{},用于表示数组索引和散列键
  • ()
  • 之后radio_group parens的存在