我有两个数组,都包含一个文件名列表。除扩展名外,两个数组中的文件名都相同。
即。 filename.dwg 和 filename.zip
现在,我已将每个文件列表分配给一个数组。
即。 @dwg_files 和 @zip_files
最终,我要做的是检查不同数组中两个同名文件之间的最后修改日期,然后运行一个脚本,如果一个比其他更年轻。到目前为止,除了比较两个名称不同的文件外,我的工作似乎有效。我需要它来比较第一个数组中的文件和另一个数组中的相同文件。
即。 asdf1.dwg 应与 asdf1.zip
相关联my $counter = 0 ;
while ( $counter < @dwg_files ) {
print "$counter\n";
my $dwg_file = $dwg_files[$counter];
my $zip_file = $zip_files[$counter];
#check if zip exists
if (-e $zip_file) {
#Checks last modification date
if (-M $dwg_file < $zip_file) {
*runs script to creat zip*
} else {
*Print "Does not need update."*
}
} else {
*runs script to create zip*
}
$counter++;
}
做一些研究,我想我会尝试使用哈希来关联这两个数组。我似乎无法弄清楚如何按名称关联它们。
my %hash;
@hash{@dwg_files} = @zip_files;
我是一个完整的Perl noob(上周刚开始使用它)。我已经坚持了几天,任何帮助都会非常感激!
答案 0 :(得分:2)
您可以使用dwg文件名,将扩展名更改为zip,然后继续进行检查,
for my $dwg_file (@dwg_files) {
my $zip_file = $dwg_file;
print "dwg:$dwg_file\n";
$zip_file =~ s/[.]dwg/.zip/i or next;
#check if zip exists
if (-e $zip_file) {
#Checks last modification date
if (-M $dwg_file < -M $zip_file) {
#*runs script to creat zip*
} else {
#*Print "Does not need update."*
}
} else {
#*runs script to create zip*
}
}
答案 1 :(得分:0)
要将所有文件名存储在哈希中,您可以执行以下操作:
#!/usr/bin/perl
use Data::Dumper;
# grab all dwg and zip files
my @dwg_files = glob("*.dwg");
my @zip_files = glob("*.zip");
sub hashify {
my ($dwg_files, $zip_files) = @_;
my %hash;
# iterate through one of the arrays
for my $dwg_file ( @$dwg_files ) {
# parse filename out
my ($name) = $dwg_file =~ /(.*)\.dwg/;
# store an entry in the hash for both the zip
# and dwg files
# Entries of the form:
# { "asdf1" => ["asdf1.dwg", "asdf1.zip"]
$hash{$name} = ["$name.dwg", "$name.zip"];
}
# return a reference to your hash
return \%hash;
}
# \ creates a reference to the arrays
print Dumper ( hashify( \@dwg_files, \@zip_files ) );
这就是生成的哈希的样子:
{
'asdf3' => [
'asdf3.dwg',
'asdf3.zip'
],
'asdf5' => [
'asdf5.dwg',
'asdf5.zip'
],
'asdf2' => [
'asdf2.dwg',
'asdf2.zip'
],
'asdf4' => [
'asdf4.dwg',
'asdf4.zip'
],
'asdf1' => [
'asdf1.dwg',
'asdf1.zip'
]
};