【问题标题】:accessing perl scalar variables in ()访问 () 中的 perl 标量变量
【发布时间】:2017-09-15 22:45:47
【问题描述】:
$a=10 
print "$a";
print "${a}";
print "$(a)";

print "$a";print "${a}"; 的工作方式完全相同,看起来 perl 中支持这两种语法来打印标量变量,但 print "$(a)"; 打印奇怪的值,想了解print "$(a)"; 时会发生什么

【问题讨论】:

  • 在我的 5.24.1 print $(a) 上是一个语法错误。
  • ... 也是我的 5.6.2 上的语法错误
  • 用双引号编辑以挽救这个问题
  • 为什么要用任意标点符号包装变量名并期望它起作用?为什么是$(a) 而不是$[a]$<a>

标签: perl


【解决方案1】:

$( 在 Perl 中是一个有效的标量。它包含当前用户所属的组 id 的空格分隔列表。

所以print "$(a)" 等价于print $( . "a)",你可以期待像这样的输出

perl -e 'print "$(a)"'
100 100 14677a)

【讨论】:

  • 谢谢,为什么要打印“$a”;并打印“${a}”;以同样的方式工作,是 perl 支持这两种语法类型还是有任何其他逻辑原因?
  • ${...} 是必要的,因为有时需要将印记应用于复杂的表达式(${$foo->{bar}[42]})。更简单的$var 语法是必要的,因为如果 Perl 程序员每次想要引用一个变量时都必须输入额外的大括号,那么 Perl 永远不会流行(你必须继续输入 $ 已经够糟糕了)。
  • 此外,${...} 不仅可以用于将变量名称指定为...,还可以用于返回标量引用的表达式,然后使用${} 取消引用。真的,阅读上面提到的“perldata”页面是个好主意:-)
  • ${varname} 最常见的用例是当您进行插值并且没有分隔时。示例:"${bytes_total}B available"(功能与${bytes_total} . 'B available' 相同)写成"$bytes_totalB available" 不起作用,因为Perl 将寻找变量$bytes_totalB
  • @mob 你混淆了${ scalar-ref-expr }${ identifier(optional index) };你说的是前者,问题是后者。
猜你喜欢
  • 1970-01-01
  • 2015-04-09
  • 2011-10-21
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 2011-01-12
相关资源
最近更新 更多