【问题标题】:What is the difference between $dxyabc and ${dxyabc} in Perl?Perl 中的 $dxyabc 和 ${dxyabc} 有什么区别?
【发布时间】:2026-01-30 15:10:01
【问题描述】:

字符串$dxyabc和字符串${dxyabc}在Perl中的定义有什么区别?

【问题讨论】:

    标签: perl


    【解决方案1】:

    嗯,这取决于上下文。例如,

    $foo = "$dxyabcdef";
    $bar = "${dxyabc}def";
    

    $foo 将具有$dxyabcdef 的值,而不是附加$dxyabcdef,这是$bar 的值。

    否则,据我所知,它们是相同的。

    【讨论】:

      【解决方案2】:

      perldoc perldata 解释了为什么在标量变量的上下文中使用花括号:

      在某些 shell 中,您可以将变量名括在大括号中 消除它与以下字母数字(和下划线)的歧义。你也必须这样做 将变量插入字符串以分隔变量名 来自后面的双冒号或撇号,因为这些将是 否则视为包分隔符:

      $who = "Larry";
      print PASSWD "${who}::0:0:Superuser:/:/bin/perl\n";
      print "We use ${who}speak when ${who}'s here.\n";
      

      如果没有大括号,Perl 会寻找 $whospeak$who::0$who's 变量。最后两个是 $0$s 变量 (大概)不存在的包who


      正如其他人所提到的,$dxyabc${dxyabc} 之间没有区别。引用的文档解释了为什么"$dxyabc_""${dxyabc}_" 之间存在差异

      【讨论】:

        【解决方案3】:

        无,大括号是变量名的分隔符。

        【讨论】:

        • 你的答案只在某些情况下是正确的,Oesor。有关它为何依赖于 ${con} 文本的详细信息,请参阅其他答案。