[tpm] Pipe expression result through external filter command

Shlomi Fish shlomif at shlomifish.org
Mon May 14 12:13:06 PDT 2012

Hi Antonio,

a few comments on your code.

On Mon, 14 May 2012 13:29:47 -0400
Antonio Sun <antoniosun at lavabit.com> wrote:

> On Mon, May 14, 2012 at 12:06 PM, Antonio Sun <antoniosun at lavabit.com>wrote:
> > I need to calculate 12+34, then pipe this expression result through an
> > external shell filter command, say 'rev'.
> >
> > ultimately, I'm going to use the whole expression in the second part of
> > string replace 's/.../.../eg' operation.
> >
> Maybe I have to do it in two steps:
>  perl -e '$str = "1234"; $str =~ s/1234/$var = $&; `echo $var | rev`/e;
> print $str'

1. Using $& will incur a slowdown on the rest of the matches done in the
program. You should instead do:

s/(1234)/$var = $1; [rest of expression here]/

2. Look into https://metacpan.org/module/IPC::System::Simple and
https://metacpan.org/release/IPC-Run instead of using backticks ( `...` ). 
If you are going to use backticks, make sure you quote the variables you
pass this way (which varies from shell to shell).

3. I hope the external command in question is harder to do properly in Perl
than the UNIX "rev" command. You may also wish to search CPAN for a module
doing something similar.

For more information, see:



	Shlomi Fish 

Shlomi Fish       http://www.shlomifish.org/
List of Portability Libraries - http://shlom.in/port-libs

There is an IGLU Cabal, but its only purpose is to deny the existence of an
IGLU Cabal. 
    — Martha Greenberg

Please reply to list if it's a mailing list post - http://shlom.in/reply .

More information about the toronto-pm mailing list