我有一个关于如何->评估运算符左右两侧的问题.请考虑以下代码:
#! /usr/bin/perl
use strict;
use warnings;
use feature ':5.10';
$, = ': ';
$" = ', ';
my $sub = sub { "@_" };
sub u { shift->(@_) }
sub v { my $s = shift; $s->(@_) }
say 'u', u($sub, 'foo', 'bar');
say 'v', v($sub, 'foo', 'bar');
Run Code Online (Sandbox Code Playgroud)
输出:
u: CODE(0x324718), foo, bar
v: foo, bar
Run Code Online (Sandbox Code Playgroud)
我希望你和你的行为相同,但事实并非如此.在这些情况下,我总是假设perl评估了从左到右的事情.代码就像shift->another_method(@_)甚至shift->another_method(shift, 'stuff', @_)很常见.
如果第一个参数恰好是代码引用,为什么会中断?我在未定义/未记录的领域吗?
perl ×1