【问题标题】:Perl - cast hash to array without using further variablePerl - 将哈希转换为数组而不使用其他变量
【发布时间】:2013-01-13 21:09:03
【问题描述】:

可以在 perl 中将哈希转换为数组但不使用更多变量? 这按预期工作,但使用了另一个变量 (@arr):

perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); @arr=%hash; print "@arr"'

我已经尝试过这些,但都没有成功(顺便说一句,它们是做什么的?):

perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); print "@hash"'
perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); print "%@hash"'
perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); print "@%hash"'

【问题讨论】:

  • 不确定您希望它们做什么,因为您使用的是完全不同的变量名称。
  • 我只是想知道是否可以将哈希转换为数组而无需声明数组变量。
  • 我知道,但是你为什么会期待你尝试做的事情呢?您分配一个名为hash 的变量,然后在您的打印语句中使用arr,即使您没有分配它。
  • 哦,抱歉,现在已修复,只是错字
  • 根据术语的任何合理定义,“Torvalds”不是 Linus Torvalds 的“名字”。

标签: arrays perl hash casting


【解决方案1】:
perl -wlae '%hash=(name=>"linus", forename=>"torvalds "); print (%hash);'

将表达式放在括号中会在列表上下文中对其进行评估,就像分配给列表变量一样。

print 的情况下,这种转换是不必要的,因为它对数组和散列都使用列表上下文。但是如果你想用哈希做其他数组风格的事情,你可以使用它,例如

$first = (%hash)[0];
echo $first;

【讨论】:

  • 谢谢,请问括号 是做什么的?
  • 在答案中添加了解释。
  • -1 :您的解释毫无意义。 print %hash; 工作得很好。
  • @Zaid 查看我刚刚添加的其他详细信息。
  • 括号不会强制在列表上下文中进行评估。他们所做的只是强加一个特定的评估顺序。只要子例程没有原型,任何调用的参数都会在列表上下文中计算,带或不带括号。
猜你喜欢
  • 1970-01-01
  • 2011-02-23
  • 2014-08-10
  • 2014-07-23
  • 2019-10-27
  • 2019-05-23
  • 2012-10-29
  • 2012-11-11
  • 2021-07-13
相关资源
最近更新 更多