perl - 为什么 Dumper 模块在其设置哈希的分配周围放置括号?

标签 perl

已阅读 this questionthis question关于 my $var 之间的差异和 my ($var) ,我仍然无法理解为什么 Data::Dumper 模块在其代码的以下摘录中使用括号。这些问题的答案中描述的差异似乎都不适用于这里。

  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
       };

我在一个小脚本中对其进行了测试,我看不出将其声明为 my ($s) 之间有什么区别或作为 my $s .据我所知,在这两种情况下,它都是对哈希的标量引用。

我错过了什么吗?

最佳答案

我同意,这很奇怪。一般来说,赋值左侧的括号会强制右侧在列表上下文而不是标量上下文中进行评估。但这在上面的示例中没有任何作用。

然而,它似乎与 my(...) = ... 的许多其他不必要的用途一致。在 Data::Dumper 中,比如这个:

sub Reset {
  my($s) = shift;
  $s->{seen} = {};
  return $s;
}

尽管如此,它并不一致,因为您还会发现很多未使用它的示例,例如:
my $ref = \$_[1];
my $v;

也许这是作者偶尔的个人偏好,或者他们计划进行多次分配并且之后从未清理过他们的代码......或者可能是多个具有不同偏好的作者,他们犹豫着踩到彼此的脚趾,或者修复他们认为的问题没坏。但这只是猜测...

关于perl - 为什么 Dumper 模块在其设置哈希的分配周围放置括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44147469/

相关文章:

c - 将数据从 c 发送到 perl

python - 在文件的 url 字符串中添加引号

mysql - 使用csv中的key通过dbi检索对应的多个key及其值

perl - 为什么我看到我的 Perl 哈希是一个分数,比如 '28/64' ?

perl - 如何故障转移

regex - Perl:匹配制表符分隔文件中的确切单词

perl - 保存内容时 LWP::UserAgent 内存使用情况

perl - 混淆谜题 : Can you figure out what this Perl function does?

perl - 方括号在 Perl 中有什么作用?

perl - 如何使用 Perl rmtree 删除具有 unicode 字 rune 件名的文件夹?