Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Perl replacement challenge



> From pws@xxxxxxxxxxxx  Wed Oct 29 10:47:20 1997
> X-Perlmail-1: 0 junkmail pattern matches
> Subject: Re: Perl replacement challenge 
> To: ramos@xxxxxxxxxxxxxxxxxxxx, zsh-users@xxxxxxxxxxxxxxx (Zsh users list)
> 
> ramos@xxxxxxxxxxxxxxxxxxxx wrote:
> > I have a very simple and effective solution:
> > 
> > 	# Use "kshdot some_ksh_script" instead of ". some_ksh_script"
> > 
> > 	kshdot() { source =(ksh -c ". $* 1>&2; senv") }
> > 
> > Where 'senv' is the following Perl script:
> > ...
> 
> As a minimal modification which omits the Perl script, how about
> 
> kshdot() { 
>   setopt allexport localoptions
>   source =(ksh -c ". $* 1>&2; typeset +x _ PWD; typeset -x")
> }
> 

This almost works! But the 'typeset -x' runs inside ksh (which, in fact,
it has to), which means the quoting syntax is different.

e.g. If a variable contains control characters, ksh would print:

FOO=$'\n\n\a\n'

And that's not parsed correctly by zsh, even with "emulate ksh" on.
That example, by the way, works fine with my Perl solution.

Any other ideas???

I was wanting to rewrite the Perl script as a zsh function, but I can't
find a "search and replace" builtin in zsh to do the quoting.

e.g.

senv()   { .... this is hard to write ... }
kshdot() { source =(ksh -c ". $* 1>&2" | senv) }

> 
> But remember you can make emulate local to a function.  You might get
> away with something like
> 
> kshdot() { emulate ksh; setopt localoptions; . $*; }
> 
> at least for some of the scripts.

Yup, works for some scripts. But some of them go out of their way to
try to make sure you're really running an honest ksh.

Thanks for your time,

--
Alex Ramos
atramos@xxxxxxxxxx




Messages sorted by: Reverse Date, Date, Thread, Author