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