This is the mail archive of the guile@cygnus.com mailing list for the guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

expect module


Recently I had cause to use the `expect' module.  It is pretty
convenient, but I noticed a couple things I don't like or don't
understand.

First, since it works on a per-character basis, it is very slow (I
attribute this slowness to expect.scm and not Guile, but I admit I
haven't run any tests).  In my case, I know I want to operate only on
entire lines.  It would be nice if there were an `expect' option to
enable this.

Second, I don't understand the usage of `$' in regular expressions
here.  Or, rather, I think I understand it, but I don't like it.  The
manual implies that $ will match newlines.  In reality it matches the
end of any string -- rendering it useless for my purposes.  The
appended program demonstrates the problem: the regex is matched
individually for each character of /etc/passwd.  This behavior
suprised me; I think it would be more natural if a `$' in an expect
regex matched only a newline.  (In this case it might be possible for
expect-strings to automatically notice when line-by-line mode could be
entered.  (But an explicit flag is good enough for me.))

Tom

(use-modules (ice-9 expect))
(with-input-from-file "/etc/passwd"
  (lambda ()
    (while (char-ready?)
	   (expect-strings
	    ("^.*$"
	     => (lambda all
		  (display all)
		  (newline)))))))