带有通配符和变量的perl中的globbing

时间:2014-05-08 21:58:07

标签: perl glob

我试图做一些看似相当简单的事情,但我无法弄清楚我的生活如何得到我需要的东西。

我有一个名为$ scene的变量,我希望得到一个属于场景变量的文件名数组,这样我就可以循环遍历它们并且"做东西"。有些文件有LE7前缀,有些文件有LT5和LT4。此外,有几个属于场景的文件,每个文件都有一个唯一的日期。我对perl非常陌生(就像今天刚刚开始的那样),我似乎无法掌握整个字符串/转义/变量交易。

这是我尝试的第一种方式:

#!/usr/bin/perl -w

use autodie;
use strict;
use warnings;
use File::Glob ':glob';

my $inpath = "indata/gz";

open(LIST, "desktop/migrate_list.txt");

while (my $scene = <LIST>){
    chomp $scene;
    my @gzfiles=glob("$inpath/L??$scene*.gz");

    foreach my $gzfile (@gzfiles) {
        # do stuff....

    }
}
close LIST;

我可以详细介绍我尝试过的各种不同的事情以及我得到的结果但基本上我的方法非常粗糙并导致一堆无意义的废话(最重要的是 - 全局数组总是空了)。

显然,我错过了如何将通配符和变量合并到字符串/命令调用中。我已经尝试了很多东西,但我在思考/希望有人知道一个解决方案,因为我不知道。

要明确我正在寻找的东西,这里有一个例子。说$scene = "011099"。然后该数组可以包含以下文件:

LE70110992001365-SC28491244.tar.gz,     LT40110991990001-SC9793793477.tar.gz,
LT40110992010099-SC983698346923.tar.gz, LT50110992002365-SC6938693863.tar.gz,
LE70110991992001-SC936983693.tar.gz, ...

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:6)

将评论中的调试转换为答案:

使用此:

use Data::Dumper; 
$Data::Dumper::Useqq = 1; 
chomp(my @scenes = <LIST>); 
print Dumper \@scenes; 

看看你是否有你认为在文件中有的行。看起来你的问题是你的文件中有空格,这会打破全局。