【问题标题】:What is the meaning of `$array[x, y]` in Perl?Perl 中的`$array[x, y]` 是什么意思?
【发布时间】:2011-12-22 11:42:17
【问题描述】:

我知道@array[0,2,6] 是一个包含多个值的数组。

我相信$scalar=3 是一个具有单个标量值的变量。

但是,$array[3, 4] 是什么?它是一个有两个值的标量变量吗?

【问题讨论】:

  • 根据您的 cmets,我的书Learning Perl 可能对您有用。学习语言比猜测你看到的每一个新事物更容易。 :)

标签: arrays perl scalar


【解决方案1】:

@array[0,2,6](或更一般的@array[ EXPR ])是一个数组切片。 (参见perldata)索引表达式在列表上下文中求值,返回的列表被视为索引列表,由这些索引标识的元素由切片返回。

$array[ EXPR ] 是一个数组元素。索引表达式在标量上下文中求值,返回值被视为一个索引,并返回由该索引标识的元素。

代码3,4 在标量上下文中的计算结果为4 - 请参阅perlop 中的逗号运算符 - 所以$array[3,4]$array[4] 相同,除了一个无效上下文警告。

【讨论】:

  • 叹息。我举了一个不好的例子来解释我的问题。我的问题是这个。我有一个代码 my $foo=[0x108A,0x1069];我的 $obj= 新 Obj($filehandle,$foo);现在,我知道 $obj 是子例程 Obj() 的对象。在文件句柄之后传递给函数的是什么问题? foo 中的两个值? foo 中的一个值?现在清楚我为什么感到困惑了吗?
  • @Fighter2, [ ] 创建一个数组和对该数组的引用,并返回该引用。此引用是它在Obj->new($filehandle, $foo) 中传递给new 的内容。
  • 好的。现在很清楚了。谢谢!顺便说一句,我还有一些问题。你觉得我可以pm你吗?
  • @Fighter2,如果你在这里或 PerlMonks 上发布它们,我会看到它们
  • 我刚刚发布了我的问题。在这里。stackoverflow.com/questions/8041853/…
【解决方案2】:

试试看:

perl -E '@ar = (10,11,12,42);say $ar[1,2,3]'
42

1,2,3 是一个列表。在标量上下文中,它返回其最后一个成员。

【讨论】:

  • 嘿,朋友。你还是失去了我。你是什​​么意思它返回最后一个成员?如果您正在寻求帮助,则必须清楚地解释,否则只会使其他人更加困惑。尤其是初学者。我知道 $a[$i] 和 @a[$i] 是不同的。我的清单是 $foo=[0x108A,0x1069];我正在将 $foo 传递给一个函数。实际通过了什么?整个列表还是列表中的一个值??
  • 哦,顺便说一句,当我在命令行上运行您的示例时,出现错误“无法识别的开关:-E(-h 将显示有效选项)”。
  • @Fighter2, [] 创建一个数组和对该数组的引用,并返回该引用。此引用是它在f($foo) 中传递给f 的内容。
  • @Fighter2、-Esay 是在 Perl 5.10 中引入的。 perl -le'@ar = (10,11,12,42); print $ar[1,2,3]' 大致等价。
  • 我举了一个不好的例子来解释我的问题。我的问题是这个。我有一个代码 my $foo=[0x108A,0x1069];我的 $obj= 新 Obj($filehandle,$foo);现在,我知道 $obj 是子例程 Obj() 的对象。在文件句柄是问题之后传递给函数的内容是什么?
猜你喜欢
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 2014-11-06
  • 1970-01-01
相关资源
最近更新 更多