in reply to sorting files
You might want to clarify your requirements a little by providing a few example input filenames and the expected output (contents of your @TXT array).
I have made a few changes to your script:
- Added use warnings;
- Stored the regex in a variable, $re, to avoid duplication.
- Removed the unnecessary capturing parentheses from the regex; since you are only using $1, you only need 1 set.
- Check $first_number instead of $1. Same for $2.
Here is the code:
use strict; use warnings; use File::Copy; sub files_sort { my $first_number; my $second_number; my $re = qr/(\d+)_\d+_duration_\w+_comptage_\d+.txt$/; if ($a =~ $re) { $first_number = $1; } if ($b =~ $re) { $second_number = $1; } if ($first_number < $second_number) { -1 } elsif ($first_number > $second_number) { 1 } else { 0 } } my @TXT = glob("*.txt"); @TXT = sort files_sort @TXT; print "$_\n" for @TXT;
Here is the output:
% ls -1 *.txt A3_output_ZGZ22_03_20061022_duration_200mn_comptage_60.txt M3_output_ZGZ22_02_20061022_duration_200mn_comptage_60.txt M3_output_ZGZ22_12_20051022_duration_200mn_comptage_60.txt M3_output_ZGZ22_12_20061022_duration_200mn_comptage_60.txt % 689020.pl M3_output_ZGZ22_02_20061022_duration_200mn_comptage_60.txt A3_output_ZGZ22_03_20061022_duration_200mn_comptage_60.txt M3_output_ZGZ22_12_20051022_duration_200mn_comptage_60.txt M3_output_ZGZ22_12_20061022_duration_200mn_comptage_60.txt
Is this what you expect?
Caveat: you must make sure that all the *.txt files in your directory match your regex.
In Section
Seekers of Perl Wisdom