Rewrite-and-Return Prefix: $@
The flow of rules is such that each and every rule in a series of rules (a rule set) is given a chance to match the workspace:
R xxx yyy R yyy zzz
The first rule matches xxx
in the workspace and rewrites the
workspace to contain yyy
. The first rule then tries to match
the workspace again but, of course, fails. The
second rule then tries to match the workspace.
Because the workspace contains yyy
, a match is found,
and the RHS rewrites the workspace to be zzz
.
There will often be times when one rule in a series
performs the appropriate rewrite and no subsequent
rules need to be called. In the earlier example,
suppose xxx
should only become yyy
and that the second rule should not
be called. To solve problems such as this,
sendmail offers the $@
prefix for use in the
RHS.
The $@
prefix tells
sendmail that the current
rule is the last one that should be used in the
current rule set. If the LHS of the current rule
matches, any rules that follow (in the current rule
set) are ignored:
R xxx $@ yyy R yyy zzz
If the workspace contains anything other than xxx
, the first rule does
not match, and the second rule is called. But if the
workspace contains xxx
, the first rule matches and
rewrites the workspace. The $@
prefix for the RHS of that rule
prevents the second rule (and any subsequent rules
in that rule set) from being called.
Note that the $@
also prevents looping. The $@
tells sendmail
to skip further rules and to
rewrite only once. The difference between $@
Get sendmail, 4th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.