Term::ReadLine und ActivePerl
Term::ReadLine und ActivePerl
am 07.06.2006 18:54:39 von Johannes
Hallo allerseits,
unter Cygwin bzw. Linux kann ich beim readline()-Aufruf im weiter unten
angegebenen Script rltest2.pl einen zu editierenden String uebergeben,
der dann auch zum Editieren angeboten wird (s.u.). Bei ActivePerl
bekomme ich nur einen leeren String zum Editieren angeboten. Woran liegt
das? Wie kann ich das aendern?
Beim "edit: "-Prompt druecke ich im folgenden immer ENTER.
####################mit ActivePerl###################################
C:\home\loewjoha\Perl\rltest>perl rltest2.pl
term=Term::ReadLine::Perl=ARRAY(0x1aaa728)
edit:
C:\home\loewjoha\Perl\rltest>type rltest2.pl
#!/usr/bin/perl
use Term::ReadLine;
use strict;
use warnings;
my $term = new Term::ReadLine 'whatever';
print "term=$term\n";
my $foo = $term->readline("edit: ", "initstring");
print "$foo\n";
C:\home\loewjoha\Perl\rltest>perl --version
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 25 registered patches, see perl -V for more detail)
Copyright 1987-2006, Larry Wall
Binary build 817 [257965] provided by ActiveState http://www.ActiveState.com
Built Mar 20 2006 17:54:25
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
C:\home\loewjoha\Perl\rltest>echo %PERL_RL%
%PERL_RL%
##########################Ende ActivePerl###########################
Unter Cygwin auf demselben Rechner (sowohl mit Term::ReadLine::Gnu als auch
mit Term::ReadLine:Perl), obiges Skript:
###################Cygwin################################### ########
~/Perl/rltest$ ./rltest2.pl
term=Term::ReadLine=HASH(0x100b7c64)
edit: initstring
initstring
~/Perl/rltest$ echo $PERL_RL
~/Perl/rltest$ export PERL_RL=Perl
~/Perl/rltest$ ./rltest2.pl
term=Term::ReadLine::Perl=ARRAY(0x10093b68)
edit: initstring
initstring
~/Perl/rltest$ perl --version
This is perl, v5.8.7 built for cygwin-thread-multi-64int
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2005, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
~/Perl/rltest$ uname -a
CYGWIN_NT-5.0 lev-0002 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin
######################Ende Cygwin###################################
fuer jede Hilfe dankbar...
Johannes
Re: Term::ReadLine und ActivePerl
am 13.06.2006 14:22:43 von KWittrock
Hallo Johannes,
"Johannes von Loewis" schrieb im Newsbeitrag
news:fc076e.831.ln@zaphod.loewis.de...
> Hallo allerseits,
>
> unter Cygwin bzw. Linux kann ich beim readline()-Aufruf im weiter unten
> angegebenen Script rltest2.pl einen zu editierenden String uebergeben,
> der dann auch zum Editieren angeboten wird (s.u.). Bei ActivePerl
> bekomme ich nur einen leeren String zum Editieren angeboten. Woran liegt
> das? Wie kann ich das aendern?
> ...............
>
> ####################mit ActivePerl###################################
> C:\home\loewjoha\Perl\rltest>perl rltest2.pl
> term=Term::ReadLine::Perl=ARRAY(0x1aaa728)
> ...............
>
> ###################Cygwin################################### ########
> ~/Perl/rltest$ ./rltest2.pl
> term=Term::ReadLine=HASH(0x100b7c64)
In der Doku heißt es: "Term::ReadLine - Perl interface to various readline
packages." Bei dir sind unter ActivePerl und Cygwin unterschiedliche
Packages installiert, die sich auch unterschiedlich verhalten. Bei mir ist
übrigens kein readline package vorhanden, ich erhalte folglich mit deinem
Beispiel unter ActivePerl
C:\Klaus\Perl\Test>readline.pl
term=Term::ReadLine::Stub=ARRAY(0x18242a8)
Gruß
Klaus
Re: Term::ReadLine und ActivePerl
am 13.06.2006 18:44:09 von Johannes
Hallo Klaus,
K. Wittrock wrote:
> "Johannes von Loewis" schrieb im Newsbeitrag
> news:fc076e.831.ln@zaphod.loewis.de...
>> unter Cygwin bzw. Linux kann ich beim readline()-Aufruf im weiter unten
>> angegebenen Script rltest2.pl einen zu editierenden String uebergeben,
>> der dann auch zum Editieren angeboten wird (s.u.). Bei ActivePerl
>> bekomme ich nur einen leeren String zum Editieren angeboten. Woran liegt
>> das? Wie kann ich das aendern?
>> ...............
>>
>> ####################mit ActivePerl###################################
>> C:\home\loewjoha\Perl\rltest>perl rltest2.pl
>> term=Term::ReadLine::Perl=ARRAY(0x1aaa728)
>> ...............
>>
>> ###################Cygwin################################### ########
>> ~/Perl/rltest$ ./rltest2.pl
>> term=Term::ReadLine=HASH(0x100b7c64)
>
> In der Doku heißt es: "Term::ReadLine - Perl interface to various readline
> packages."
In der Doku steht auch, dass mit der Umgebungsvaribale TERM_RL das zu
verwendende Readline Package ausgewaehlt werden kann. Deswegen schrieb
ich auch (Cygwin):
>> ~/Perl/rltest$ export PERL_RL=Perl
>> ~/Perl/rltest$ ./rltest2.pl
>> term=Term::ReadLine::Perl=ARRAY(0x10093b68)
>> edit: initstring
>> initstring
> Bei dir sind unter ActivePerl und Cygwin unterschiedliche
> Packages installiert, die sich auch unterschiedlich verhalten.
Die 'term='-Zeile der Ausgabe des Scripts unter Cygwin sieht der
'term='-Zeile der Ausgabe des Scripts unter ActivePerl so aehnlich, dass
ich davon ausging, dass es sich um das gleiche 'readline package'
handelt.
> Bei mir ist übrigens kein readline package vorhanden, ich erhalte
> folglich mit deinem Beispiel unter ActivePerl
>
> C:\Klaus\Perl\Test>readline.pl
> term=Term::ReadLine::Stub=ARRAY(0x18242a8)
Welche Version von ActivePerl verwendest Du? Ich musste nichts
nachinstallieren, um Term::ReadLine::Perl zu bekommen.
Gruss
Johannes
Re: Term::ReadLine und ActivePerl
am 16.06.2006 17:10:26 von KWittrock
Hallo Johannes,
"Johannes von Loewis" schrieb im Newsbeitrag
news:p0qm6e.f31.ln@zaphod.loewis.de...
>>> ...............
>>>
>>> ####################mit ActivePerl###################################
>>> C:\home\loewjoha\Perl\rltest>perl rltest2.pl
>>> term=Term::ReadLine::Perl=ARRAY(0x1aaa728)
>>> ...............
>>>
>>> ###################Cygwin################################### ########
>>> ~/Perl/rltest$ ./rltest2.pl
>>> term=Term::ReadLine=HASH(0x100b7c64)
>>
>> In der Doku heißt es: "Term::ReadLine - Perl interface to various
>> readline
>> packages."
>
> In der Doku steht auch, dass mit der Umgebungsvaribale TERM_RL das zu
> verwendende Readline Package ausgewaehlt werden kann. Deswegen schrieb
> ich auch (Cygwin):
>
>>> ~/Perl/rltest$ export PERL_RL=Perl
>>> ~/Perl/rltest$ ./rltest2.pl
>>> term=Term::ReadLine::Perl=ARRAY(0x10093b68)
>>> edit: initstring
>>> initstring
Ich hatte übersehen, dass du unter Cygwin dein Skript zweimal aufrufst. Tut
mir leid.
>>> ...............
>
> Welche Version von ActivePerl verwendest Du? Ich musste nichts
> nachinstallieren, um Term::ReadLine::Perl zu bekommen.
>
Ich benutze z. Zt. noch Perl, v5.8.4 build 810. Heute habe ich
Term::ReadLine::Perl installiert (mit ppm). Dein Skript benutzt das dann
auch. Term::ReadLine::Perl vermisst dann Term::ReadKey, und das "Falling
back to 'stty'" scheitert dann an "Cannot call `stty': No such file or
directory". Ppm findet Term::ReadKey nicht, ich habe es daher von CPAN
geholt. Dort steht im README: "For Win32 users without a C compiler there is
a precompiled version of this module available as a package for ActivePerl
....." Jetzt stehe ich auf dem Schlauch.
Eines hätte ich gern gewusst: Woher hast du, dass man den Eingabestring
vorbesetzen kann? In der Doku zu Term::ReadLine kann ich dazu nichts finden,
und bei der Doku zu Term::ReadLine::Perl blicke ich nicht durch, die ist
wohl nur für Insider :-( .
Gruß
Klaus
Re: Term::ReadLine und ActivePerl
am 18.06.2006 22:33:38 von Johannes
Hallo Klaus,
K. Wittrock wrote:
> Ich benutze z. Zt. noch Perl, v5.8.4 build 810. Heute habe ich
> Term::ReadLine::Perl installiert (mit ppm). Dein Skript benutzt das dann
> auch. Term::ReadLine::Perl vermisst dann Term::ReadKey, und das "Falling
> back to 'stty'" scheitert dann an "Cannot call `stty': No such file or
> directory". Ppm findet Term::ReadKey nicht, ich habe es daher von CPAN
> geholt. Dort steht im README: "For Win32 users without a C compiler there is
> a precompiled version of this module available as a package for ActivePerl
> ...." Jetzt stehe ich auf dem Schlauch.
Den richtigen Weg (tm) um Module (und jene, von denen sie abhaengen) zu
installieren, habe ich auch noch nicht gefunden. PPM scheint ja nicht
einmal Abhaengigkeiten zu erkennen und darauf hinzuweisen, dass fuer
Modul X auch noch Modul Y erforderlich ist. Falls Du
Term::ReadLine::Perl brauchst, waere es vermutlich am einfachsten, wenn
Du ein aktuelles ActivePerl installiertest. Andererseits deuten die
Schwierigkeiten mit der Angabe eines "Preput"-Strings nicht gerade
darauf hin, dass das Modul unter ActivePerl besonders ausgiebig getestet
worden ist.
> Eines hätte ich gern gewusst: Woher hast du, dass man den Eingabestring
> vorbesetzen kann? In der Doku zu Term::ReadLine kann ich dazu nichts finden,
Ich habe irgendwann mal gegoogelt (wonach genau, weiss ich nicht mehr)
und ein Usenet-Posting oder einen Forenbeitrag gefunden, der besagte,
dass man den Eingabestring vorbesetzen kann. Aus der Doku, die zu diesem
Zeitpunkt auf meinem Rechner war, konnte ich das auch nicht entnehmen.
> und bei der Doku zu Term::ReadLine::Perl blicke ich nicht durch, die ist
> wohl nur für Insider :-( .
In der Dokumentation zu dem IMHO unter Cywgin und Linux (nicht zuletzt
wegen der sehr ausfuehrlichen Dokumentation) vorzuziehenden
Term::ReadLine::Gnu ist readline(PROMPT[,PREPUT]) dokumentiert, wobei
die Angabe von PREPUT angeblich nur funktioniert, wenn "preput" im
Features-Hash vorkommt. Auch wenn die Doku zu Term::ReadLine::Perl es
nicht hergibt, werde ich morgen mal nachsehen, ob bei ActivePerl im
Features-Hash von Term::ReadLine::Perl "preput" vorkommt.
So ganz froh werde ich mit den verschiedenen ReadLine-Implementierungen
irgendwie nicht... Mit waere eine ueberall funktionierende und
einigermassen brauchbare Implementierung lieber, als eine Vielzahl, mehr
oder weniger guter Varianten. Es muss ja nicht das Universalmonster
Term::ReadLine::Gnu sein, auch wenn ich es wegen der funktionierenden
Moeglichkeit, relativ einfach TAB-Vervollstaendigung zu implementieren,
sehr schaetze. Was nuetzt es mir, wenn ich "Features" erfragen kann, die
einzige verfuegbare ReadLine-Implementierung dann aber wichtige
Funktionen vermissen laesst?
Gruss
Johannes
Re: Term::ReadLine und ActivePerl
am 23.06.2006 17:18:40 von KWittrock
"Johannes von Loewis" schrieb im Newsbeitrag
news:2bd47e.7n.ln@zaphod.loewis.de...
> ....... Falls Du
> Term::ReadLine::Perl brauchst, waere es vermutlich am einfachsten, wenn
> Du ein aktuelles ActivePerl installiertest.
Habe ich vor, will nur erst noch Norton löschen und durch AntiVir und
ZoneAlarm ersetzen.
> Andererseits deuten die
> Schwierigkeiten mit der Angabe eines "Preput"-Strings nicht gerade
> darauf hin, dass das Modul unter ActivePerl besonders ausgiebig getestet
> worden ist.
Ich vermute, dass man zur Implementierung dafür stark auf die Mithilfe der
Shell angewiesen ist. Und beim DOS-Fenster könnte es da trübe aussehen.
> ......
> So ganz froh werde ich mit den verschiedenen ReadLine-Implementierungen
> irgendwie nicht... Mit waere eine ueberall funktionierende und
> einigermassen brauchbare Implementierung lieber, als eine Vielzahl, mehr
> oder weniger guter Varianten. Es muss ja nicht das Universalmonster
> Term::ReadLine::Gnu sein, auch wenn ich es wegen der funktionierenden
> Moeglichkeit, relativ einfach TAB-Vervollstaendigung zu implementieren,
> sehr schaetze. Was nuetzt es mir, wenn ich "Features" erfragen kann, die
> einzige verfuegbare ReadLine-Implementierung dann aber wichtige
> Funktionen vermissen laesst?
Term::ReadLine war wohl als gemeinsamer Überbau für verschiedene
Readline-Implementierungen gedacht. Und dann ist der Unterbau ins Stocken
geraten ....
Gruß
Klaus