+sub uid_fetch_smsg { # long_response
+ my ($self, $tag, $msgs, $range_info, $ops) = @_;
+ while (!@$msgs) { # rare
+ if (my $end = refill_range($self, $msgs, $range_info)) {
+ $self->write(\"$tag $end\r\n");
+ return;
+ }
+ }
+ for my $smsg (@$msgs) {
+ $self->msg_more("* $smsg->{num} FETCH (UID $smsg->{num}");
+ for (my $i = 0; $i < @$ops;) {
+ my $k = $ops->[$i++];
+ $ops->[$i++]->($self, $k, $smsg);
+ }
+ $self->msg_more(")\r\n");
+ }
+ @$msgs = ();
+ 1; # more
+}
+