Perl substr(STRING,@ARRAY)ne substr(STRING,OFFSET,LENGTH)?

前端之家收集整理的这篇文章主要介绍了Perl substr(STRING,@ARRAY)ne substr(STRING,OFFSET,LENGTH)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么在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)

猜你在找的Perl相关文章