首页 > 解决方案 > `$/` 和 `local $/` 的区别

问题描述

对于我的程序,我需要使用 FASTA 文件并使用它们进行一些计算。为了做到这一点,我使用local $/ = "^>, 将我的文件分成标题行和序列行。虽然我的程序做我想做的事,但为什么我不能简单地使用$/ = "^>"?当我尝试它时,我的结果不是我需要的,我很感兴趣为什么会这样。这是我的简化代码:

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

标签: perlvariablesglobal-variablestemp

解决方案


当地

将列出的变量修改为封闭块、文件或 eval 的本地变量。

它保存了一个(已经存在的)变量的值,然后可以根据需要更改它,并且一旦退出范围,它的原始值就会恢复。

因此,它精确地与全局变量一起使用$/——通过local对它们进行-izing,我们可以在我们需要的范围内改变它们的值,而不是让它在整个程序中改变。

perlsub中提供了更多内容。

但是,显示的内容提出了问题。该$/变量采用字符串,而不是正则表达式;据我回忆,那些“fasta”文件的行以 开头>,而不是以^>. 此外,$/需要在读取行之前设置(使用<>),我看不到显示的代码如何实现其意图。


推荐阅读