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