in reply to sorting a file by a date:"YYYY-MM-DD" field with cmp
In scalar context, the match operator and thus the bind operator returns whether a match was found or not. You want to evaluate the match in list context to get it to return the list of matches.
Fix:
my ($aDate) = $a =~ /\bdate:\s*"(\d{4}-\d{2}-\d{2})"/; my ($bDate) = $b =~ /\bdate:\s*"(\d{4}-\d{2}-\d{2})"/;
Also:
Note: Will break if you get
For a reliable but slower solution, you can use
use JSON::XS qw( decode_json ); my @sorted = map { substr($_, 10) } sort map { decode_json($_)->{date} . $_ } @events;
As for the blank lines, just remove them first using
@events = grep /\S/, @events;
Update: Added to my answer.
|
|---|