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

use*_*408 3 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;
Run Code Online (Sandbox Code Playgroud)

我可以详细介绍我尝试过的不同内容以及我得到的结果,但基本上我的方法非常粗糙,结果是一堆无意义的废话(最重要的是 - glob数组总是变空).

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

为了清楚我正在寻找什么,这是一个例子.说$scene = "011099".然后该数组可以包含以下文件:

LE70110992001365-SC28491244.tar.gz,     LT40110991990001-SC9793793477.tar.gz,
LT40110992010099-SC983698346923.tar.gz, LT50110992002365-SC6938693863.tar.gz,
LE70110991992001-SC936983693.tar.gz, ...
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.谢谢!

TLP*_*TLP 6

转换注释中的调试以回答:

用这个:

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

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

  • 投票给你:)一步一步洞察调试过程的+1(好吧,好吧,这只是一个小脚本 - 但它的工作原理).打的好! (3认同)