我正在尝试做一些看似相当简单的事情,但我无法弄清楚我的生活如何得到我需要的东西.
我有一个名为$ 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)
任何帮助表示赞赏.谢谢!
转换注释中的调试以回答:
用这个:
use Data::Dumper;
$Data::Dumper::Useqq = 1;
chomp(my @scenes = <LIST>);
print Dumper \@scenes;
Run Code Online (Sandbox Code Playgroud)
看看你是否有你认为在文件中的行.看起来你的问题是你的文件中有空格,这会打破全局.