calcn — evaluate the enclosed arithmetic expression or Perl block


Attribute Pos. Req. Default Description
interpolate     0 interpolate input?
reparse     1 interpolate output?


The tag evaluates the enclosed arithmetic expression or a Perl block. The last expression evaluated (return value) is returned back to the client page.

The tag is only a convenience and otherwise identical to [calc], except that it does not interpolate tag body by default.


This tag does not appear to be affected by, or affect, the rest of Interchange.


Example: Simple non-interpolating block

The example will, since [calcn] is used, directly return the quoted content unmodified, instead of evaluating to "TEST":

[cgi name=test set=TEST hide=1]

[calcn reparse=0] "[cgi test]" [/calcn]


See [calc] for the complete documentation.


calcn is available in Interchange versions:

4.6.0-5.9.0 (git-head)


Interchange 5.9.0:

Source: code/SystemTag/calcn.coretag
Lines: 12

# Copyright 2002-2007 Interchange Development Group and others
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.  See the LICENSE file for details.
# $Id: calcn.coretag,v 1.4 2007-03-30 23:40:49 pajamian Exp $

UserTag calcn               hasEndTag
UserTag calcn               Version      $Revision: 1.4 $
UserTag calcn               MapRoutine   Vend::Interpolate::tag_calc

Source: lib/Vend/
Lines: 2823

sub tag_calc {
my($body) = @_;
my $result;
if($Vend::NoInterpolate) {
  logGlobal({ level => 'alert' },
        "Attempt to interpolate perl/ITL from RPC, no permissions."

$Items = $Vend::Items;

if($MVSAFE::Safe) {
  $result = eval($body);
else {
  init_calc() if ! $Vend::Calc_initialized;
  $result = $ready_safe->reval($body);

if ($@) {
  my $msg = $@;
  $Vend::Session->{try}{$Vend::Try} = $msg if $Vend::Try;
  logGlobal({ level => 'debug' }, "Safe: %s\n%s\n" , $msg, $body);
  logError("Safe: %s\n%s\n" , $msg, $body);
  return $MVSAFE::Safe ? '' : 0;
return $result;


Interchange Development Group


perl(7ic), mvasp(7ic), calc(7ic)

DocBook! Interchange!