I'm running 

  $ m4 --version
  m4 (GNU M4) 1.4.16
  Copyright (C) 2011 Free Software Foundation, Inc.
  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
  This is free software: you are free to change and redistribute it.
  There is NO WARRANTY, to the extent permitted by law.

  Written by Rene' Seindal.

  $ 

on

  $ cat /proc/version
  Linux version 3.1.0-1-686-pae (Debian 3.1.1-1) ([email protected]) (gcc
  version 4.6.2 (Debian 4.6.2-4) ) #1 SMP Mon Nov 14 08:24:20 UTC 2011

  $ 

and I'm not understanding why this

  $ cat t
  m4_define(_itlvar,
    `m4_ifelse(m4_regexp($1, ^[[:alpha:]]*$), -1, $1, itl($1))')

  m4_define(subsen, `_itlvar($1) \(\sqsubseteq\) _itlvar($2)')

  subsen(a, b)
  subsen(a, bld(b))
  subsen(bld(a), b)

  $ 

produces this

  $ m4 -P < t




  itl(a) \(\sqsubseteq\) b
  itl(a) \(\sqsubseteq\) bld(b)
  bld(a) \(\sqsubseteq\) b

  $ 

How is it that _itlvar works correctly on the first argument to subsen but not
the second (apart from accidentally)?

I know there needs to be more quoting to deal with arguments containing commas,
but let's assume my question is dealing with exactly and only the example
above.


Reply via email to