command line perl (UNIX)

command line perl (UNIX)

am 23.02.2007 22:30:58 von Ulli Horlacher

Ich bin ein grosser Fan von Perl-Einzeilern in der interaktiven
shell. Leider beisst sich das mit der shell-Interpolation von
Sonderzeichen und wird besonders unhandlich, wenn \ und ' Zeichen
hinzukommen.

Ich hab mir deshalb ein Command Line Perl (clp) geschrieben, das GNU
readline support hat analog zur bash (Modul Term::ReadLine::Gnu sollte
installiert sein!) und persistente und multiple history.

Vielleicht findet das jemand nuetzlich.
Beispiel (CLP ist der Prompt):


bofh:~: clp /etc/passwd
Command Line Perl with readline support, @ARGV and Specials:
? print this help
?? print comand line editing help
?! print extra history help
! show history
!! edit history
(empty line) delete current line from history
.... DD(VAR) print Data Dump for variable VAR, example: DD(%ENV)
.... #|sh-code pipe output from perl-code to sh-code, example: #| less
.... #>file write output from perl-code to file, example: #> clp.log

CLP: DD(@ARGV)

@ARGV = (
'/etc/passwd'
);

CLP: while (<>) { print if /framstag/ }

framstag:x:1023:106:Ulli Horlacher:/home/framstag:/usr/bin/bash

CLP: while (<>) { print if /framstag/ } #| wc

1 2 64



Der Perl Debugger arbeitet aehnlich, hat aber Nachteile:
- keine gespeicherte history
- alles in einem Perl-Kontext, Input ueber <> wird "aufgebraucht"
- keine Verbindung zur shell mit | > >>


Download von clp: http://wwwtest6.belwue.de/download/clp


--
-- Ullrich Horlacher --------------------- mailto:framstag@belwue.de --
BelWue Coordination phone: +49 711 685 65872
University of Stuttgart fax: +49 711 678 8363
-- Allmandring 3A, 70550 Stuttgart, Germany -- http://www.belwue.de/ --

Re: command line perl (UNIX)

am 24.02.2007 17:08:59 von Florian Weimer

* Ulli Horlacher:

> Ich hab mir deshalb ein Command Line Perl (clp) geschrieben, das GNU
> readline support hat analog zur bash (Modul Term::ReadLine::Gnu sollte
> installiert sein!) und persistente und multiple history.

Wie underscheidet sich das von psh?

Re: command line perl (UNIX)

am 24.02.2007 20:34:21 von Ulli Horlacher

Florian Weimer wrote:

> > Ich hab mir deshalb ein Command Line Perl (clp) geschrieben, das GNU
>
> Wie underscheidet sich das von psh?

- psh ist eine (login) shell, es kann keine Argumente verarbeiten wie ein
normales Perl-Programm (@ARGV) oder von einer pipe STDIN lesen

- clp ist nicht als shell konzipiert, sondern zum einfachen Ausprobieren
von kurzem Perl-Code (Einzeiler)

- psh ist wesentlich komplexer, clp besteht nur aus 200 Zeilen

- psh kennt keine alternate history files, die man bei clp benutzt um
brauchbaren Code (Einzeiler) "schnell mal" abzuspeichern

- psh kann seine history nicht im Editor bearbeiten


Beispiel: ich hab einen passenden Perl-Einzeiler (pw) geschrieben um
/etc/passwd auszuwerten, das kann ich dann starten mit:

$ clp pw:: /etc/passwd

und muss dann nur noch CURSOR-UP ENTER druecken um ihn auszufuehren - oder
zu modifizieren.

Fuer jede neue command-line im clp steht mir @ARGV im original neu zur
Verfuegung. Beispiel:


$ clp pw:: /etc/passwd
(...)
CLP: while (<>) { $n++ if /bash/ }; print $n

18

CLP: while (<>) { $n++ if /csh/ }; print $n

2




-
--
-- Ullrich Horlacher --------------------- mailto:framstag@belwue.de --
BelWue Coordination phone: +49 711 685 65872
University of Stuttgart fax: +49 711 678 8363
-- Allmandring 3A, 70550 Stuttgart, Germany -- http://www.belwue.de/ --