我读过By Tom Christiansen,Brian d foy,Larry Wall,Jon Orwant的"Programming Perl".有以下文字我无法理解(我不明白的确切地方标有粗体):
您真正想知道的是哪些运营商为其操作数提供了哪些上下文.实际上,您可以轻松地告诉哪些供应列表上下文,因为它们的语法描述中都有LIST.其他一切都提供标量背景.一般来说,它非常直观.如有必要,可以使用 伪函数强制标量上下文到LIST中间的参数
scalar.Perl没有办法在上下文中强制列表上下文,因为在任何你想要列表上下文的地方它已经由某个控制函数的LIST提供了.
为方便起见,我想提出以下问题:
片段中的LIST是什么意思?
什么是句法描述?(似乎是某种文档)
下一个文字是什么意思:
你可以强制标量上下文到LIST中间的参数
TLP*_*TLP 10
这很简单,就像文字说的那样.看看perldoc -f print例如:
print FILEHANDLE LIST
print FILEHANDLE
print LIST
Run Code Online (Sandbox Code Playgroud)
就像它在那里说的那样,print需要LIST参数,这意味着print在列表上下文中发布的任何内容.对于任何将参数表示为LIST的函数,它都是相同的.
使用该scalar函数,您可以覆盖此列表上下文,以便不在列表上下文中评估您的参数.例如,文件句柄readline语句,例如:
my $line = <$fh>;
Run Code Online (Sandbox Code Playgroud)
在标量上下文中进行评估,因为$line它是标量.这意味着只读取一行并将其放入变量中.但是,如果你这样做:
print <$fh>;
Run Code Online (Sandbox Code Playgroud)
readline位于列表上下文中,这意味着将读取文件中的所有剩余行.您可以通过将readline语句放在标量上下文中来覆盖它:
print scalar <$fh>;
Run Code Online (Sandbox Code Playgroud)
然后你会读一行.更准确地说,您可以在列表中间强制执行标量上下文:
print @list, scalar <$fh>, @list2;
Run Code Online (Sandbox Code Playgroud)
这可能是你的引用所指的内容.