dominick_t:
I'd suggest running it under the debugger (perl -d script.pl) and examine the interesting bits and/or the bits you don't understand. The debugger isn't terribly difficult to use, and it's the easiest way to suss out the details you don't understand yet.
$ perl -d pm_135391.pl
Loading DB routines from perl5db.pl version 1.49_001
Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
main::(pm_135391.pl:1): while (<DATA>) {
DB<1> n
main::(pm_135391.pl:2): chomp;
DB<1> p "<$_>"
<Abby
>
So here, we started the program under the debugger, executed the first statement (loading $_ from <DATA>), then displayed the value using the p command. (I used "<$_>" to put delimiters around the value, so you can see that it has end-of-line characters in it.
DB<2> n
main::(pm_135391.pl:3): my $key = lc $_;
DB<2> n
main::(pm_135391.pl:4): next if $seen{$key}++;
DB<2> n
main::(pm_135391.pl:5): my $signature = join "", sort split //, $key
+;
DB<2> x %seen
0 "abby \cM"
1 1
Here, we executed the next three lines to chomp the value, make the $key value, and add $key to the %seen hash. Then I used the x command to display the %seen hash, so you can see what's in it.
DB<3> n
main::(pm_135391.pl:6): push @{$words{$signature}}, $_;
DB<3> x $signature
0 "\cM abby"
DB<4> h
List/search source lines: Control script execution:
l [ln|sub] List source code T Stack trace
- or . List previous/current line s [expr] Single step [in
+expr]
v [line] View around line n [expr] Next, steps over
+ subs
f filename View source in file <CR/Enter> Repeat last n or
+ s
/pattern/ ?patt? Search forw/backw r Return from subr
+outine
M Show module versions c [ln|sub] Continue until p
+osition
Debugger controls: L List break/watch
+/actions
o [...] Set debugger options t [n] [expr] Toggle trace [m
+ax depth] ][trace expr]
<[<]|{[{]|>[>] [cmd] Do pre/post-prompt b [ln|event|sub] [cnd] Set b
+reakpoint
! [N|pat] Redo a previous command B ln|* Delete a/all bre
+akpoints
H [-num] Display last num commands a [ln] cmd Do cmd before li
+ne
= [a val] Define/list an alias A ln|* Delete a/all act
+ions
h [db_cmd] Get help on command w expr Add a watch expr
+ession
h h Complete help page W expr|* Delete a/all wat
+ch exprs
|[|]db_cmd Send output to pager ![!] syscmd Run cmd in a sub
+process
q or ^D Quit R Attempt a restar
+t
Data Examination: expr Execute perl code, also see: s,n,t expr
x|m expr Evals expr in list context, dumps the result or lists
+ methods.
p expr Print expression (uses script's current package).
S [[!]pat] List subroutine names [not] matching pattern
V [Pk [Vars]] List Variables in Package. Vars can be ~pattern or !
+pattern.
X [Vars] Same as "V current_package [Vars]". i class inherita
+nce tree.
y [n [Vars]] List lexicals in higher scope <n>. Vars same as V.
e Display thread id E Display all thread ids.
For more help, type h cmd_letter, or run man perldebug for all docs.
Then, I decided I showed you enough ;^) and had it print the help page. Have fun with it!
...roboticus
When your only tool is a hammer, all problems look like your thumb.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.