为什么在Perl中:
@x=(0,2);
substr('abcd',@x)
Run Code Online (Sandbox Code Playgroud)
评价为"cd"?
还有这个:
substr('abcd',0,2);
Run Code Online (Sandbox Code Playgroud)
评价为"ab"?
ike*_*ami 12
记录的substr运算符语法是
substr EXPR,OFFSET,LENGTH,REPLACEMENT
substr EXPR,OFFSET,LENGTH
substr EXPR,OFFSET
Run Code Online (Sandbox Code Playgroud)
不
substr EXPR,ARRAY
Run Code Online (Sandbox Code Playgroud)
或更通用的
substr EXPR,LIST
Run Code Online (Sandbox Code Playgroud)
这反映在输出中prototype(尽管你不能总是依赖于此).
$ perl -E'say prototype "CORE::substr"'
$$;$$
Run Code Online (Sandbox Code Playgroud)
substr第一个参数在标量上下文中进行评估.substr第二个参数在标量上下文中进行评估.substr第三个参数(可选)在标量上下文中进行评估.substr第四个参数(可选)在标量上下文中进行评估.@x在标量上下文中是它包含的元素数(2在本例中).
您可以使用以下方法实现您想要的目标:
sub mysubstr {
if (@_ == 2) { substr($_[0], $_[1]) }
elsif (@_ == 3) { substr($_[0], $_[1], $_[2]) }
elsif (@_ == 4) { substr($_[0], $_[1], $_[2], $_[3]) }
else { die }
}
my @x = (0, 2);
mysubstr('abcd',@x)
Run Code Online (Sandbox Code Playgroud)