Dear ellie, On 17.12.2018 23:57, ellie timoney wrote: > Hi Binarus, > >> Could anybody please tell me what I might do wrong here? > > This kind of smells like maybe your system has two versions of perl installed (or two versions of Term::ReadLine, or maybe even two versions of Cyrus::IMAP::Shell), and they're getting in each other's way? > > I'm having a quick glance at the (2.5.10) source of Cyrus::IMAP::Shell and this caught my eye: > >> # ugh. ugh. suck. aieee. >> my $use_rl = 'Cyrus::IMAP::DummyReadline'; >> { >> if (eval { require Term::ReadLine; }) { >> $use_rl = 'Term::ReadLine'; >> } >> } I have done some further investigations (very roughly because I don't have the time at the moment). It seems that the code which parses the command line and the run parameters in Cyrus::IMAP::Shell is buggy (or at least not prepared to handle Term::ReadLine::Gnu). As a proof, I have reinstalled Term::ReadLine:Gnu and verified that the problem was showing again. Then I have replaced the following code in Cyrus::IMAP::Shell # trivial; wrapper for _run with correct setup sub run { my $cyradm; _run(\$cyradm, [*STDIN, *STDOUT, *STDERR], *__DATA__); } by the following code: # trivial; wrapper for _run with correct setup sub run { my $cyradm; open(*__DATA__, "./000"); _run(\$cyradm, [*STDIN, *STDOUT, *STDERR], *__DATA__); } In other words, I just have made sure that this mysterious *__DATA__ variable is reasonably defined in every case before _run is called. Now the command perl -MCyrus::IMAP::Shell -e 'run("000")' executed without any error message. To verify that the script worked as intended, I added a few lines to it: connect -noauthenticate localhost auth cyrus lm When run as shown above, it did exactly what it was supposed to. It asked for the password and then listed all mailboxes and their subfolders. So now I have at least a system where I can have Term::ReadLine::Gnu installed (and thus can have a history and command editing capabilities in cyradm) _and_ can execute a script, although the script's filename is hardcoded. Probably it would be absolutely trivial for the authors of Cyrus::IMAP::Shell to fix this issue. It would be very nice if somebody could care about it. Perhaps it's already fixed in the newer versions? I am still on 2.5.10. I have no idea why the "buggy" command line / argument parsing does not strike when Term::ReadLine::Gnu is uninstalled; I haven't grasped yet how *__DATA__ is supposed to be assigned a reasonable value to during the normal course of execution. I currently can only speculate that Term::ReadLine::<default stub> does this for us, while Term::ReadLine::Gnu doesn't. Regards, Binarus ---- Cyrus Home Page: http://www.cyrusimap.org/ List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/ To Unsubscribe: https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus