Search code examples
perl

How to set priority while reading multiple files in Perl


Script is reading files from a input directory in that we have 5 different files . I am trying to set priority on the files while I am processing it.

opendir ( INPUT_DIR, $ENV{INPUT_DIR} ) ||  die "Error in opening dir $ENV{INPUT_DIR}";
my @input_files = grep {!/^\./}  readdir(INPUT_DIR);
foreach my $input_file (@input_files) 
{
  if($input_file =~ m/^$proc_mask}$/i) 
  {
     # processing files
  }
}

Like I have 5 files

Creation.txt
Creation_extra.txt
Modify.txt
Modify_add.txt
Delete.txt

Now once we read these input files I want to set priority that first Creation_extra.txt files is processed and then Delete.txt is processed.

I am not able to set priority on the files reading and then processing it


Solution

  • If I understand you correctly, you want to be able to point out some high priority file names that should be processed before other files. Here's a way:

    use strict;
    use warnings;
    use feature 'say';
    
    my @files = <DATA>;   # simulate reading dir
    chomp @files;         # remove newlines
    my %prio;
    @prio{ @files } = (0) x @files;    # set default prio = 0
    my @high_prio = qw(Creation_extra.txt Delete.txt);   # high prio list
    
    # to set high prio we only want existing files
    for (@high_prio) {
        if (exists $prio{$_}) {  # check if file name exists
            $prio{$_} = 1;       # set prio
        }
    }
    
    # now process files by sorting by prio, or alphabetical if same prio
    for (sort { $prio{$b} <=> $prio{$a} || $a cmp $b } @files) {
        say;
    }
    
    __DATA__
    Creation.txt
    Creation_extra.txt
    Modify.txt
    Modify_add.txt
    Delete.txt