0

我有两个数组,都由文件名列表组成。除了扩展名之外,两个数组中的文件名相同。

文件名.dwg文件名.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 菜鸟(上周才开始使用它)。我已经坚持了好几天了,任何帮助都会非常感激!

4

2 回答 2

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*
  }

}
于 2013-06-19T17:59:18.340 回答
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'
             ]
};
于 2013-06-19T18:14:03.683 回答