1

我的变量$var的格式为“abc.de”。这个 substr 在这个语句中到底做了什么:

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

5 回答 5

5

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

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

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

index($var, ".") 

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

于 2009-06-11T11:24:02.737 回答
2

这里隐含的 substr 用法是 -

substr EXPR,OFFSET,LENGTH

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

查看 perldoc 中的substrindex函数以进一步阐明问题。

于 2009-06-11T11:24:17.773 回答
0

Perl substr函数具有以下格式:

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

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

索引具有格式:

index [str], [substr]

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

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

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

编辑:该死,人们太快了:P 编辑2:布赖恩关于索引使用不正确的说法是正确的

于 2009-06-11T11:25:00.097 回答
0

为什么不运行它并找出答案?

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

print "index 是 $index.\n";

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

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

此外,您可能需要输入:

perldoc -f 索引
perldoc -f substr
于 2009-06-17T21:45:38.347 回答
0

神奇的是,您可以使用 substr 作为赋值的左侧将数据写入子字符串:

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

您甚至不需要坚持相同的长度 - 字符串会扩展以适合。

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

于 2009-06-17T21:50:57.070 回答