Perl文件 *** 作,这里为什么在末尾加上冒号,不是应该加分号吗?

Perl文件 *** 作,这里为什么在末尾加上冒号,不是应该加分号吗?,第1张

看清楚.. 这是 ? : 的结构, 那个 "指令" ( expression ) 不是在 : 那里完结. ?: 句式是这样用的:

$结果 = (情况) ? (情况为真时的回传给$结果的值) : (情况为假时的回传给$结果值)

# 举例: 

$x = 10 

$y = $x >= 10 ? "yes" : "no" 

print $y  # yes

#也相当於:

if ($x>= 10) {$y="yes"} else {$y="no"}

所以, 其实您上面那一段的意思其实是:

sub prefix {

    my $file = shift

    if ( -l $file ) {

        return $link

    }

    else {

        if ( -d $file && $indent != $depth ) {

            return $dir

        }

        else {

            if ( -d _ ) {

                return $stop

            }

            else {

                if ( -f _ ) {

                    return $reg

                }

                else {

                    return $spec

                }

            }

        }

    }

}

您可能发现, 上例并没有 "return" 这个动作动作出现, 不过, 在 perl 里, 一个 sub 中如果没有明言 return 甚麼的话, 那最後一个 expression 的结果就会是回传值.

顺便也说一下, 在 ?: 的结构里, 您不该写指令, 只该用来做逻辑比较 (如那些 >= != eq ne...), 因为其原意是将比较的最後结果回传给最左边的 $结果. 那就是说.. 其实你是可以写成这样 :

$x >= 10 ? { print "ok" } : { print "not ok" }

但如果都写到这份上, 那还不如写 if ( ... ) { ... } else { ... }, 可读性高多了.

我假设你的“数字”都是按行存放的

我还假设你的“数字”和重叠不会发生结尾不足等问题

以上假设都是非常小的问题,可轻松解决,在此只为解释方法省去不必要的麻烦

程序接口等自己完成

打开文件有两种方法,一种在一开始全部打开,一种边输出边打开

本人能力有限,就简单化为第一种

前提,已知“数字”个数,即<输入文件>行数

可用shell, wc -l得到行数

my $line_number = 300

my $contig = 100

my $overlap = 20

my $nolap = $contig - $overlap

my $start = 0

my %hash

while (1)

{

my $name = "句柄名字"

$hash{$start} = $name

my $over = $start + $contig

open $name ">", $start ..$over " ...

$name = "新的句柄名字" # 自己想办法循环有效地转换句柄名称,可用正则等

$start = $start + $nolap # 开始位置改变

last, if ($over == $line_number)# 超过了就跳出

}

my $i # 计数器

my @print# 句柄数组

$start = 0

while ( <输入文件>)

{

my $line = $_

if ($i == $start)

{

push @print, $hash{$start}

$start = $nolap + $nolap

&printout(\@print, $line)

}

}

sub printout

{

my @print = @{$_[0]}

foreach (@print)

{

print {$_} $_[1]

}

}

以上,都是我自己现写的,没有测试的半伪代码,很有可能有致命错误,仅供参考

看到FASTA我就开心了,果然是搞生物的同行,互相学习了。

P.s 这样的程序你们的前辈应该有,管他们要吧,那些程序优化过,更成熟,如果得到了给我发一份学习下~谢


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11794728.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存