,将我的文件压缩到标题行和序列行中。虽然我的程序执行了我想要它执行的操作,但为什么不-6ren">
gpt4 book ai didi

perl - `$/`和 `local $/`的区别

转载 作者:行者123 更新时间:2023-12-04 22:42:12 25 4
gpt4 key购买 nike

对于我的程序,我需要使用 FASTA 文件并对它们进行一些计算。为了做到这一点,我使用了 local $/= "^>,将我的文件压缩到标题行和序列行中。虽然我的程序执行了我想要它执行的操作,但为什么不能' t 我只是简单地使用 $/= "^>" 吗?当我尝试它时,我的结果不是我需要的,我很想知道为什么会这样。这是我的简化代码:

my @array;
while(<>){
local $/ = "^>";
chomp;
push (@array, $_);
if(eof){
for(@array){
...
}
...
}
if(eof){
@array = ();
}

最佳答案

local $var 保存 $var 的值,并向堆栈添加一个指令,该指令将导致 $var 的值在范围退出时恢复(即使是异常)。它是可用于封装变量的最接近 my 的东西。

$_ = 123;
{
local $_ = 456;
# $_ is 456 here.
}
# $_ is back to being 123 here.

这有助于避免在周围代码或调用者(在 subs 的情况下)中引起问题。

请注意,$/ 的值是逐字符匹配的。它不被视为正则表达式。

请注意,在您发布的代码中似乎无故设置了 $/(除非您遗漏了某些内容)。


why can't I just simply use $/ = "^>"

然后,更改不会在 block 末尾撤消,因此它会影响 <> 条件中的 while 以及执行读取的循环之后的任何代码。


我如何处理 FASTA 文件:

my ($header, $seq);
while (1) {
my $line = <>;
if (!defined($line) || $line =~ /^>/) {
work($header, $seq) if defined($header);

last if !defined($line);

chomp($line);
$header = substr($line, 1);
$seq = "";
} else {
chomp($line);
$seq .= $line;
}
}

关于perl - `$/`和 `local $/`的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55449646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com