#
# Scan through a file and replace each occurrance of 0 with
# VARIABLE`s value. When or is encountered,
# increment or decrement the previously scanned variable. Variables are
# initialized to 0. Other operators could be allowed. For example one of the
# operators of the form += could be followed immediately by a variable
# (e.g. 0*=2 would multiply variable by 2). Only 2
# character operators need be allowed (**= is probably not needed).
#
# Usage:
# perl donums.pl pagefile.aki > pagefile.htm
#
#------------------------------------------------------------------------------
require 5.004;
use English;
use strict;
my @fields;
my $n_fields;
my $i;
my $thing;
my $variable;
my %values;
my $value;
my $line;
while(<>) {
@fields = split(/\|/);
$n_fields = @fields;
if ($n_fields >= 5) {
$line = "";
for($i=0; $i<$n_fields; $i++) {
if (($i < $n_fields - 2) &&
($fields[$i] eq "variable") &&
($fields[$i+2] eq "")) {
# Found something of the form 0.
# The value "thing" can be either the name of a variable whose
# value is to be outputted, or an operator on the last variable
# that was referred to. Currently only ++ and -- operators are
# supported.
$thing = $fields[$i+1];
$i++;
if ($thing eq "++") {
if ($variable ne "") {
$values{$variable}++;
}
}
elsif ($thing eq "--") {
if ($variable ne "") {
$values{$variable}--;
}
}
else {
$variable = $thing;
$value = $values{$variable} + 0;
$line = $line . $value;
}
}
else {
# No special value was encountered. Concatenate this field to
# pass this field to the output line.
$line = $line . $fields[$i];
}
}
print $line;
}
else {
print $_;
}
}
Back to The Information Cave home page
Last modified Sat Aug 21 21:19:17 1999.