【问题标题】:extracting filename and getting " GLOB<0x486a8> in perl提取文件名并在 perl 中获取“ GLOB<0x486a8>
【发布时间】:2014-12-29 14:48:13
【问题描述】:

我正在尝试提取我的文件名,但我一直将 GLOB 作为文件名?我查看了多个回答类似问题的问题的答案,但我似乎仍然无法解决我的问题。我打开的文件是标准的 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";
    }
}

有人想吗?

【问题讨论】:

  • /[\.][f][a]$/ 是写/\.fa$/ 的一种相当复杂的方式。而opendirreaddir的整个过程是一种复杂的写法:my @sorted = sort glob "data/*.fa"

标签: perl filenames glob


【解决方案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";

【讨论】:

  • 感谢您的快速回复!如果你看不出来我是初学者!
猜你喜欢
  • 2015-09-14
  • 2017-10-28
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
相关资源
最近更新 更多