加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:58:23 所属栏目:大数据 来源:网络整理
导读:为什么在Perl中: @x=(0,2); substr('abcd',@x) 评价为“cd”? 还有这个: substr('abcd',2); 评价为“ab”? 解决方法 substr 运算符的文档语法是 substr EXPR,OFFSET,LENGTH,REPLACEMENTsubstr EXPR,LENGTHsubstr EXPR,OFFSET 不 substr EXPR,ARRAY 或更
为什么在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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读