2

当我有 2 个数据结构含义相同时,例如:

$c->req->cookies->{app1} = $c->req->cookies->{general};
$c->req->cookies->{app2} = $c->req->cookies->{general};

我可以写:

( $c->req->cookies->{app1}, $c->req->cookies->{app2} ) = $c->req->cookies->{general};

?

另外,我可以写:

   $c->req->cookies->{app1} =  $c->req->cookies->{app2 } = $c->req->cookies->{general};

?

4

2 回答 2

7

第二种形式是可能的,有些人经常使用它

$x = $y = $z;

第一种形式不能满足您的需要。它仅将值分配给第一个变量。

($x, $y) = $z;

您还需要右侧的两个成员列表:

($x, $y) = ($z) x 2;

更新: 在您的情况下,x仅当所涉及的方法为两个调用返回相同的值时,您才能使用运算符,否则,您可以使用

($x, $y) = map $obj->method, 1, 2;
于 2013-07-24T10:17:33.980 回答
4

像往常一样,有很多方法可以做到这一点。例如,您还可以使用哈希切片:

@{ $c->req->cookies }{qw( app1 app2 )}

但是,我建议缺乏独创性:

my $cookies = $c->req->cookies;
my $general_cookie = $cookies->{general};
$cookies->{$_} = $general_cookie for qw(app1 app2);

这使代码更具可读性,不会创建新的数据结构,并尽可能减少复杂的解引用。

于 2013-07-24T11:19:29.517 回答