Perl的substr做了什么?

时间:2009-06-11 11:18:23

标签: perl string substr

我的变量$var的格式为'abc.de'。这个substr在这个陈述中究竟做了什么:

$convar = substr($var,0,index(".",$var));

5 个答案:

答案 0 :(得分:5)

index()在另一个字符串中找到一个字符串,并返回该字符串的索引或位置。

substr()将返回2个位置之间的字符串的子串(从0开始)。

看看上面的内容,我怀疑索引方法的使用不正确(因为它的定义是索引STR,SUBSTR ),它应该是

index($var, ".") 

找到'。'在'abc.de'中并确定“abc.de”的子串

答案 1 :(得分:2)

这里隐含的子用法是 -

substr EXPR,OFFSET,LENGTH

由于偏移量为0,因此操作返回字符串upto但不包括第一个'。'位置(由index(“。”,$ var)返回)到$ convar。

查看perldoc中的substrindex函数,以进一步澄清问题。

答案 2 :(得分:0)

Perl substr函数的格式为:

substr [string], [offset], [length]

将字符串从索引偏移量返回到索引偏移量+长度

index格式为:

index [str], [substr]

返回str。中第一次出现substr的索引。

so substr('abc.de',0,index(“。”,$ var)); 将返回从索引0开始的子字符串(即'a'),直到第一次出现字符串的字符数“。”

所以$ convar在你拥有的例子中会有“abc”

编辑:该死的,人太快了:P edit2:并且Brian对索引使用不正确

答案 3 :(得分:0)

为什么不运行它并找出来?

#!/usr/bin/perl
my $var = $ARGV[0];
my $index = index(".",$var);

print "index is $index.\n";

my $convar = substr($var, 0, $index);
print "convar is $convar.\n";

在一堆单词上运行它,看看会发生什么。

此外,您可能需要输入:

perldoc -f index
perldoc -f substr

答案 4 :(得分:0)

非常棒,您可以使用substr作为作业的左侧将数据写入子字符串:

$ perl -e '$a="perl sucks!", substr($a,5,5)="kicks ass"; print $a'
perl kicks ass!

你甚至不需要坚持相同的长度 - 字符串将扩展到适合。

从技术上讲,这被称为使用substr作为左值。