<>读取文件时的嵌套问题

<>读取文件时的嵌套问题

需要在读取一个文件的过程中对另外一个文件进行遍历,使用类似如下形式的代码:
while(<FILE1>){
    ... ...;
    while(<FILE2>){
        ... ...;
    }
    ... ...;
}

但是在<FILE2>中只能读取第一行,得知在“<>”嵌套使用过程中会有异常发生,但是如何解决?还请高手指点!
试试用FileHandle模块,然后用它的getline函数,不要用<>操作符
我试了试,好像没出问题啊,要不你贴代码看看?
getline也是调用的<>吧?
我的代码就是上面那样的,只是在内测循环中使用next的时候直接跳出外侧的循环了,使用标签也不管用
我加了个 next 也没有跳出去啊。

btw:你不贴代码,谁也帮不了你。
我的代码:

open IN, "< $infile" or die "$infile: $!";
while (<IN>){
        chomp;
        next if $. == 1;
        my @F = split/\t/;
        my $chro = $F[5];
        my $chrfile = "chr/ref_chr" . $chro . ".fa";
        my $seq = get_seq($chrfile, $ctg);
}
close IN;

sub get_seq{
        my $chrfile = shift;
        my $ctg = shift;
        open CHRO, "< $chrfile" or die "$chrfile: $!";
        my $record = 0;
        my $seq = "";
LOOP:        while (<CHRO>){
                chomp;
                my $line = $_;
                print "$.\n";
                if ($line =~ /^>/){
                        my @F = split/\|/;
                        my $ctg_in = $F[3];
                        $ctg_in =~ s/\..*$//;
                        if ($ctg_in eq $ctg){
                                $record = 1;
                                print "Got $ctg_in\n";
                        }else {
                          next LOOP;
                        }
                }
                if ($record == 1){
                        if ($line =~ /^>/){
                                $record = 0;
                                last LOOP;
                        }
                        $seq .= $line;
                }
        }
        print "$seq\n";
        close CHRO;
        return $seq;
}
是你程序的问题

#!/usr/bin/perl


use strict;
use warnings;

my $infile = 'infile.txt';

open IN, "< $infile"
    or die "$infile: $!";

while (<IN>){
        chomp;
        next if $. == 1;
        my $chro = (split/\t/)[5];
        my $chrfile = "chr/ref_chr" . $chro . ".fa";

        #

        my $ctg = 'test';
        #


        my $seq = get_seq($chrfile, $ctg);

        print "$seq\n";
}

sub get_seq{
        my $chrfile = shift;
        my $ctg = shift;
        my $seq;
        
        #

        $chrfile = 'chrfile.txt';
        #

        
        open CHRO, "< $chrfile"
            or die "$chrfile: $!";
        
        while (<CHRO>){
                chomp;
       
                if (/^>/){
                        my $ctg_in = (split/\|/)[3];
                        $ctg_in =~ s/\..*$//;
                        
                        next unless $ctg_in eq $ctg;
                        $seq = $_;
                        last;
                }               
        }
        return $seq;
}


[Copy to clipboard] [ - ]
CODE:
infile.txt
t        h        h        h        h        h        h        h
h        h        h        h        h        h        h        h
h        h        h        h        h        h        h        h
h        h        h        h        h        h        h        h

chrfile.txt
=
=
=
=
>h|test|test|test|test|test|test


>perl -w Perl-1.pl
>h|test|test|test|test|test|test
>h|test|test|test|test|test|test
>h|test|test|test|test|test|test
>Exit code: 0

你把函数里的 print 都去掉试试
找到问题了,由于我是的inputfile是在windows下生成的,所以我在chomp的时候用了local $/ = '\r';导致在子例程中将文件一次性读入,所以看起来一直只有一行,原来吃过'\n\r'的亏,现在居然又矫枉过正了,真是又上了一课!

非常感谢cobrawgl的耐心帮助,也希望我的教训能给大家些启示,呵呵