Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: Unbelievably Obvious Debugging Tip

by Abigail-II (Bishop)
on Apr 27, 2004 at 14:29 UTC ( #348503=note: print w/replies, xml ) Need Help??

in reply to Unbelievably Obvious Debugging Tip

Before everyone starts modifying their programs, modifying all their print statements, I'd like to point old and trusty cat. Everyone knows cat. Not everyone knows its options. -E is very useful in this regard: it makes cat print a $ at the end of each line. Other useful cat options for debugging output: -T which displays tabs as ^I, and -v which will show non-printable and non-ASCII characters using ^ and M- notation. With some versions of cat, cat -vET can also be written as cat -A.

cat is your friend. Never debug without it!


Replies are listed 'Best First'.
Re: Re: Unbelievably Obvious Debugging Tip
by benrwebb (Scribe) on Apr 27, 2004 at 20:54 UTC
    My only concern with that is people who work from a non-UNIX terminal. As I recall, the closest windows alternative (without loading Cygwin) is type, which of course has none of those options. Personally, I tend to agree with the original poster, I delimit my variables when writing logging or debugging output.
      Man, those Windows users are such lazy bastards. Too damn lazy to install a decent Unix toolkit, and too damn lazy to write a trivial Perl program. All they can do is whine that a solution is too Unix specific (never mind the fact that an open source solution for any Unix toolkit is available, not something we can say about Windows tools, can we?) Djees, you give them Perl - the portable Unix - and they still aren't satisfied.
      #!/usr/bin/perl use strict; use warnings; no warnings qw /syntax/; use Getopt::Long; my ($show_ends, $show_tabs, $show_nonprinting); GetOptions ("A|show-all" => sub {$show_ends = 1; $show_tabs = 1; $show_nonprinting = 1}, "e" => sub {$show_ends = 1; $show_nonprinting = 1}, "E|show-ends" => sub {$show_ends = 1}, "t" => sub {$show_tabs = 1; $show_nonprinting = 1}, "T|show-tabs" => sub {$show_tabs = 1}, "v|show-nonprinting" => sub {$show_nonprinting = 1}, ); while (<>) { chomp; s/([\x80-\xFF])/"M-" . chr (ord ($1) - 0x80)/eg if $show_nonprinti +ng; s/([\x00-\x08])/"^" . chr (ord ($1) + 0x40)/eg if $show_nonprinti +ng; s/([\x0A-\x1F])/"^" . chr (ord ($1) + 0x40)/eg if $show_nonprinti +ng; s/\x7F/^?/g if $show_nonprinti +ng; s/\x09/^I/g if $show_tabs; s/$/\$/ if $show_ends; print "$_\n"; } __END__
      Took less than 15 minutes to write and test.


      Those who work without a decent set of tools get no sympathy from me. Either they are fools, or they work for fools. In both cases, the fool is the one who suffers from reduced productivity, which is as it should be.
        Who is the more foolish? The fool or the fool that follows him?
Re: Re: Unbelievably Obvious Debugging Tip
by ambrus (Abbot) on Apr 27, 2004 at 18:45 UTC

    I use cat -A for ages. Yes, it is a good thing.

    Also, I often use cat -v to make nonprintable characters printable, so that if there's a C-N it wouldn't mess up my terminal, but if it's only text, it would not change. It's also a great way to see C-M's.

Re: Re: Unbelievably Obvious Debugging Tip
by Anonymous Monk on Apr 27, 2004 at 15:03 UTC
    Wow! You learn something new every day. Thanks for the tip!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://348503]
[shmem]: of course
[shmem]: the members of @another_array are conflated to @array
[shmem]: try it out:
[Lady_Aleena]: shmem, thanks. I'm am way out of practice.
[shmem]: perl -lE '@foo = (0..3);@bar = (4..7); push @foo,@bar; say for @foo'
[Lady_Aleena]: shmem, I feel like an idiot for forgetting something so basic.
shmem puts a big cauldron of "silly con charme" on the table in the refectorium

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2017-04-27 11:31 GMT
Find Nodes?
    Voting Booth?
    I'm a fool:

    Results (503 votes). Check out past polls.