看了这个问题,并且这个问题上的分歧my $var和my ($var),我仍然无法理解为什么数据::翻车机模块中从以下代码摘录使用括号.这些问题的答案中描述的差异似乎都不适用于此.
my($s) = {
level => 0, # current recursive depth
indent => $Indent, # various styles of indenting
# a bunch of other settings removed for brevity's sake
deparse => $Deparse, # use B::Deparse for coderefs
noseen => $Sparseseen, # do not populate the seen hash unless necessary
};
Run Code Online (Sandbox Code Playgroud)
我用一个小脚本测试了它,我觉得在声明这个my ($s)或者之间没有任何区别my $s.在这两种情况下,它都是哈希的标量引用,据我所知.
我错过了什么吗?
我同意,这很奇怪.通常,赋值左侧的括号强制在列表上下文中而不是标量上下文中评估右侧.但是在上面的例子中没有任何结果.
但是,它似乎与my(...) = ...Data :: Dumper中的许多其他不必要的用法一致,例如:
sub Reset {
my($s) = shift;
$s->{seen} = {};
return $s;
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,它并不一致,因为你也发现很多不使用它的例子,例如:
my $ref = \$_[1];
my $v;
Run Code Online (Sandbox Code Playgroud)
也许这是作者的偶然个人偏好,或者他们计划进行多项任务,并且从未在......之后清理过他们的代码......或者可能是多个具有不同偏好的作者犹豫不决地踩到对方的脚趾,或者修复他们认为的不是没破.但那只是猜测......