package App::WRT::Util;
|
|
|
|
use strict;
|
|
use warnings;
|
|
use open qw(:std :utf8);
|
|
|
|
use Carp;
|
|
use Encode;
|
|
|
|
use base qw(Exporter);
|
|
our @EXPORT_OK = qw(dir_list file_put_contents file_get_contents);
|
|
|
|
=over
|
|
|
|
=item dir_list($dir, $sort_order, $pattern)
|
|
|
|
Return a $sort_order sorted list of files matching regex $pattern in a
|
|
directory.
|
|
|
|
Calls $sort_order, which can be one of:
|
|
|
|
alpha - alphabetical
|
|
reverse_alpha - alphabetical, reversed
|
|
high_to_low - numeric, high to low
|
|
low_to_high - numeric, low to high
|
|
|
|
=cut
|
|
|
|
sub dir_list {
|
|
my ($dir, $sort_order, $pattern) = @_;
|
|
|
|
$pattern //= qr/^[0-9]{1,2}$/;
|
|
$sort_order //= 'high_to_low';
|
|
|
|
opendir my $list_dir, $dir
|
|
or croak "Couldn't open $dir: $!";
|
|
|
|
my @files = sort $sort_order
|
|
grep { m/$pattern/ }
|
|
readdir $list_dir;
|
|
|
|
closedir $list_dir;
|
|
|
|
return @files;
|
|
}
|
|
|
|
# Various named sorts for dir_list:
|
|
sub alpha { $a cmp $b; } # alphabetical
|
|
sub high_to_low { $b <=> $a; } # numeric, high to low
|
|
sub low_to_high { $a <=> $b; } # numberic, low to high
|
|
sub reverse_alpha { $b cmp $a; } # alphabetical, reversed
|
|
|
|
=item file_put_contents($file, $contents)
|
|
|
|
Write $contents string to $file path. Because:
|
|
|
|
L<https://secure.php.net/manual/en/function.file-put-contents.php>
|
|
|
|
=cut
|
|
|
|
sub file_put_contents {
|
|
my ($file, $contents) = @_;
|
|
open(my $fh, '>', $file)
|
|
or croak "Unable to open $file for writing: $!";
|
|
print $fh $contents;
|
|
close $fh;
|
|
}
|
|
|
|
=item file_get_contents($file)
|
|
|
|
Get contents string of $file path. Because:
|
|
|
|
L<https://secure.php.net/manual/en/function.file-get-contents.php>
|
|
|
|
=cut
|
|
|
|
sub file_get_contents {
|
|
my ($file) = @_;
|
|
|
|
# Make warnings here fatal, and return some useful info about which file is
|
|
# being opened:
|
|
local $SIG{__WARN__} = sub {
|
|
croak "$_[0] when opening $file\n";
|
|
};
|
|
|
|
open my $fh, '<', $file
|
|
or croak "Couldn't open $file: $!\n";
|
|
|
|
my $contents;
|
|
{
|
|
# line separator:
|
|
local $/ = undef;
|
|
$contents = <$fh>;
|
|
}
|
|
|
|
close $fh or croak "Couldn't close $file: $!";
|
|
|
|
return $contents;
|
|
}
|
|
|
|
=back
|
|
|
|
1;
|