当我有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};
答案 0 :(得分:7)
第二种形式是可能的,有些人经常使用它
$x = $y = $z;
第一种形式不能满足你的需要。它只为第一个变量赋值。
($x, $y) = $z;
您还需要右侧的两个成员列表:
($x, $y) = ($z) x 2;
<强>更新强>
在您的情况下,只有在涉及的方法为两个调用返回相同的值时才能使用x
运算符,否则,您可以使用
($x, $y) = map $obj->method, 1, 2;
答案 1 :(得分:4)
像往常一样,有很多方法可以做到这一点。例如,您也可以使用哈希切片:
@{ $c->req->cookies }{qw( app1 app2 )}
但是,我建议缺乏原创性:
my $cookies = $c->req->cookies;
my $general_cookie = $cookies->{general};
$cookies->{$_} = $general_cookie for qw(app1 app2);
使代码更具可读性,不会创建新的数据结构,并尽可能减少复杂的解除引用。