Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

chomping the output of

by LanX (Bishop)
on Sep 08, 2012 at 20:23 UTC ( #992526=perlquestion: print w/replies, xml ) Need Help??
LanX has asked for the wisdom of the Perl Monks concerning the following question:

hi im using use Shell qw/commands/ in my perldebugger config to have some handy shell commands while interacting with the OS. Unfortunately the newlines are a bit disturbing,
DB<109> pwd => "/tmp\n"
any clever suggestions how to automatically chomp them? At the moment I'm doing it with a brute force wrapper like
my $old= \&pwd; my $new= sub { chomp( my @ret=$old->(@_) ); return @ret }; *pwd=$new;
DB<114> pwd => "/tmp"
Anything better? Should be as lightweight as possible...

Cheers Rolf

Replies are listed 'Best First'.
Re: chomping the output of
by kcott (Chancellor) on Sep 09, 2012 at 05:11 UTC

    G'day Rolf,

    Update: I posted a solution but later found it didn't work with commands that output multiple lines (e.g. ls, ps, etc.). Here's a new solution that doesn't have that problem. The original also had a portability issue: this one doesn't. (The spoiler below contains the original solution.)

    My .perldb contains:

    $ cat ~/.perldb for (qw{pwd date ls ps}) { $DB::alias{$_} = 's{^($_.*)$}{chomp(my $out = qx{$1}); print {$DB::OUT} $out} +e'; }

    Obviously, substitute qw{pwd date ls ps} with your qw/commands/. See perldebug - Debugger Customization for a description of %DB::alias.

    Here's a test run:

    $ perl -d -e 1 Loading DB routines from version 1.33 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 1 DB<1> pwd /Users/ken/tmp DB<2> date Sun 9 Sep 2012 18:12:43 EST DB<3> date "%Y-%m-%d" date: illegal time format usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS +]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format] DB<4> date "+%Y-%m-%d" 2012-09-09 DB<5> ls -l total 30824 ... drwxr-xr-x 7 ken staff 238 14 Jun 20:23 zip_test DB<6> ps -ef UID PID PPID C STIME TTY TIME CMD ... 501 74528 74527 0 23Aug12 ttys007 0:00.04 -bash DB<7> q $

    The typo (date "%Y-%m-%d") was accidental but I left it in just to show that the mistake was handled in a reasonable fashion.

    -- Ken

      Hi Ken,

      thanks for your solution, but I wanna use those functions in any place not only at start of line.


      rm grep {/.pl$/} ls

      If you wanna implement (start of line) aliases, you should simply us "!!"

      DB<112> =du !!du DB<113> du /tmp 8 /tmp/pulse-lanx 4 /tmp/virtual-lanx.AqXwcf ... DB<114> $DB::alias{du} => "s\adu\a!!du\a"

      !! cmd Run cmd in a subprocess (reads from DB::IN, writes to DB:: +OUT) See 'O shellBang' too.

      Cheers Rolf

      ) Yes I could use the file-glob <*> instead, but this is only an example for chaining commands

Re: chomping the output of
by Anonymous Monk on Sep 08, 2012 at 21:35 UTC

    any clever suggestions how to automatically chomp them?

    Modify to accept  { autochomp => [qw[ commands ]] }

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://992526]
Approved by Old_Gray_Bear
Front-paged by Corion
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (3)
As of 2017-12-17 09:47 GMT
Find Nodes?
    Voting Booth?
    What programming language do you hate the most?

    Results (463 votes). Check out past polls.