Es ist aufgrund der Unterschiede im Verhalten zwischen Listen- und Skalarkontext, und der Tatsache, dass scalar
ist ein Operator und kein Unterprogrammaufruf. scalar
kann nur einen einzigen Operanden verwenden. Wenn Sie also mehr als einen Parameter übergeben, werden diese in einen skalaren Kontext gestellt. Dies ist anders als bei gewöhnlichen Unterprogrammaufrufen, bei denen sich die Parameter immer im Listenkontext befinden.
In skalaren Kontext wertet der Komma-Operator seinen linken Operanden aus und verwirft ihn und wertet dann seinen rechten Operanden aus. So scalar(1, @l)
wertet und verwirft 1
und wertet dann @l
aus. Wie Sie sagen, dass 4 ist, weil @l
vier Elemente haben
Eine Liste in Scheiben schneiden, wenig überraschend, erlegt Listenkontext, und in der Liste trennen Kontext Kommas, um die Elemente einer Liste und Arrays und Hashes abgeflacht ist.So (1, @l)[1]
ist die gleiche wie (1, qw/ a b c d /)[1]
die a
ist
Perl-Array Operatoren wie push
und pop
verhalten sich in ähnlicher Weise. push @l, 1
würde nicht viel nutzen, wenn es sich genauso wie eine gewöhnliche Unterroutine verhält und auf push 'a', 'b', 'c', 'd', 1
erweitert wird> Ein Listenausschnitt erzwingt Listenkontext. Danke –