1 package WebPAC::Output::Sorted;
6 use base qw/WebPAC::Common WebPAC::Output Class::Accessor/;
7 __PACKAGE__->mk_accessors(qw(
16 use Data::Dump qw/dump/;
17 use WebPAC::Common qw/force_array/;
21 WebPAC::Output::Sorted - create sorted lists
29 our $VERSION = '0.01';
33 Create sorted with from data with type C<sorted>.
39 my $output = new WebPAC::Output::Sorted({
40 path => '/path/to/sorted_dir',
53 my $log = $self->_get_logger;
55 foreach my $p (qw/path database/) {
56 $log->logdie("need $p") unless ($self->$p);
59 if ( ! -e $self->path ) {
60 mkpath $self->path || $log->logdie("can't create ", $self->path,": $!");
61 $log->info("created ", $self->path);
81 my $log = $self->_get_logger;
82 $log->logdie("need id") unless defined $id;
83 $log->logdie("need ds") unless $ds;
85 $log->debug("id: $id ds = ",sub { dump($ds) });
87 my $hash = $self->ds_to_hash( $ds, 'sorted' ) || return;
89 $log->debug("add( $id, ", sub { dump($ds) }," ) => ", sub { dump( $hash ) });
91 foreach my $f ( keys %$hash ) {
93 my $sortex = $self->{sortex}->{$f};
97 my $sortscheme = sub { $Sort::External::b <=> $Sort::External::a };
98 $sortex = Sort::External->new(
99 -mem_threshold => 2**24, # default: 2**20 (1Mb)
100 -cache_size => 100_000, # default: undef (disabled)
101 # -sortsub => $sortscheme, # default sort: standard lexical
102 # -working_dir => $tmp,
105 $log->logdie("can't create sorted list for $f: $!") unless $sortex;
107 $log->info("created sorted list for $f");
109 $self->{sortex}->{$f} = $sortex;
115 # we want LF in output file :-)
116 @v = map { "$_\n" } force_array( $hash->{$f} );
118 $self->{sortex}->{$f}->feed( @v );
136 my $log = $self->_get_logger();
138 $log->info("finish sorted lists");
140 foreach my $list ( keys %{ $self->{sortex} } ) {
142 my $path = $self->path . '/' . $list . '.txt';
143 $log->info("saving $list to $path");
146 $self->{sortex}->{$list}->finish(
148 -flags => (O_CREAT | O_WRONLY),
153 $log->info("over with sorted lists");
161 Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>
163 =head1 COPYRIGHT & LICENSE
165 Copyright 2007 Dobrica Pavlinusic, All Rights Reserved.
167 This program is free software; you can redistribute it and/or modify it
168 under the same terms as Perl itself.