Mitsuru Furukawa <furu(_at_)009(_dot_)com> writes:
Is there any way I can control execution of action line with length of BODY?
Yes.  Look up the '>' and '<' special conditions, as described in the
procmailrc(5) manpage.
What I want to do is to 
split BODY into less-than-100-char chunks and forward them to pager.
And I certainly do not want to send out empty messages.
While this _is_ doable using a recursive INCLUDERC, it's a lot easier
to do with perl:
        :0 bw
        |forward_to_pager
Where forward_to_pager contains:
        #!/usr/local/bin/perl
        # ...or whereever
        undef $/;
        $_ = <>;
        s/\n/ /g;
        while(length($_)) {
            open(PAGER, "|pager -with -any -needed -args") or die "fork: $!";
            print substr($_, 0, 100), "\n";
            close(PAGER) or die "exec or write: $!";
            substr($_, 0, 100) = '';
        }
To comment on the recipes you did include:
   :0bfw
   | perl -pe 's/\n/ /g'
tr would probably be more efficient.
   :0bc
   BODYLEN=|formail -I ""|wc -m 
Since you're only feeding the body in to the action, the formail call
is unnecesary.  I just tried various recipes and the fastest one I
could find is:
        :0
        * B ?? 1^1 > 1
        { }
        BODYLEN = $=
Note that the 'B' and 'H' flags don't affect length conditions.
Philip Guenther