<>生成的数组大小?

CJ7*_*CJ7 3 arrays size perl glob

如果我想查找生成的数组的大小<>,为什么以下不起作用?

print "Number of .DOC and .PDF files is: " scalar(<*.PDF *.DOC>);
Run Code Online (Sandbox Code Playgroud)

它提供了第一个匹配文件的名称.

ike*_*ami 10

让我们首先澄清一些误解.

  • glob[1]永远不会返回数组.运算符不返回数组[2] ; 他们返回标量.有时没有,有时一个,有时很多.

  • scalar影响运营商,而不是他们返回的价值.具体而言,scalar使得内部运算符在标量上下文中进行评估.

  • 操作员如何受上下文影响取决于每个操作员.唯一不变的是它们必须在标量上下文中返回一个标量.他们选择在标量语境中返回的内容有很多种.

在标量上下文中,glob作为迭代器,返回它将在列表上下文中返回的下一个项,或者undef表示没有其他值要返回.


解决方案:


  1. <*.PDF *.DOC> 是一个快捷方式 glob(qq<*.PDF *.DOC>)

  2. 除了@a在某些情况下(包括\@a,@a = LIST和阵列操纵器等push @a, LIST).