提取文件名并获取" GLOB< 0x486a8>在perl

时间:2014-11-02 23:56:35

标签: perl filenames glob

我正在尝试提取我的文件名,但我一直在获取GLOB< 0x486a8>作为文件名?我已经查看了回答类似问题的问题的多个答案,但我似乎无法解决我的问题。我打开的文件是标准的fasta文件,格式如下,第一行包含序列信息,后面的行是序列。

这是我的代码

#!/usr/bin/perl
use strict;
use warnings;

#open files from data directory
opendir my $data_dir, "data" or die "Unable to open directory!";
my @files = readdir $data_dir;    #reading files into array

#Taking only files with .fa extention
my @fa_files = grep /[\.][f][a]$/, @files;
my @sorted_fa_files = sort @fa_files;
#Taking each .fa and reading description line

foreach (@sorted_fa_files) {
    open my $filehandle, "<", "data/$_" or die "Unable to open file!";
    while (<$filehandle>) {
        print "filename: $filehandle\n";
    }
}

有人想到吗?

1 个答案:

答案 0 :(得分:1)

文件名是"data/$_"(至少在while循环之前;你在while中覆盖$_)。 $filehandle是一个文件句柄,而不是文件名。

你应该避免将$_用于两个不同的目的;改为使用词汇变量:

foreach my $filename (@sorted_fa_files){
    open my $filehandle,"<","data/$filename" or die "Unable to open file!";
    while ( my $line = <$filehandle> ){
        print "filename: data/$filename";