【发布时间】:2021-02-10 21:48:48
【问题描述】:
我了解以下代码的一般目的(即总结字符串的数字部分,例如对于 currstr="3S47M" 然后 seqlength=50)。
但是有人可以逐行解释我发生了什么吗?
特别是,我很难理解where 在每个回合中所持有的价值。更准确地说,我不理解 scalar 函数 ("scalar($RLENGTH = length($&), $RSTART = length($`)+1)") 的部分?
RLENGTH和RSTART的赋值发生在scalar内部是否正确?
为什么在 scalar 中使用逗号分隔的赋值?这是什么意思 ?那么它的评估结果是什么?
如果有人能提供帮助,我将非常感激!
谢谢
艾丽卡
my $seqlength=0;
my $currstr="3S47M";
my $where = $currstr =~ /[0-9]+[M|D|N|X|=|S|H|N]/
? scalar($RLENGTH = length($&), $RSTART = length($`)+1) : 0;
while ($where > 0) {
$seqlength += substr($currstr, ($where)-1, $RLENGTH - 1) + 0;
$currstr = substr($currstr, ($where + $RLENGTH)-1);
$where = $currstr =~ /[0-9]+[M|D|N|X|=|S|H|N]/
? scalar($RLENGTH = length($&), $RSTART = length($`)+1) : 0;
}
编辑:RSTART 的目的是什么?为什么写scalar($RLENGTH = length($&)不起作用?
【问题讨论】: