On Sat, Jan 31, 2015 at 1:58 PM, Harry Putnam <rea...@newsguy.com> wrote:
> I've given myself a headache googling on how to debug a perl script
> that does not run.
>
> Maybe `debug' is the wrong word... I'd love to know if there is a more
> accurage one.
>
> I realize this post is quite a lot of yak, but hoping someone can lay
> out a few steps that will narrow down the problem.
>
> Many, many of the google hits are all about using the debugger, which
> of course is a non-starter if the darn script will not run due to
> compilation errors..
>
> I have about 100 lines or so inside a File::Find:
>
>   find (
>      sub {
>      }, $tdir;
>    );
>
> Type of setup. I've beat down the multitudiness errors that perl found
> during compilation.  Down to the last one I'm getting.
>
> Before posting all the boring, poorly written code, I thought I'd ask if 
> people
> here can outline a few things to do in a case like this.
>
> So far, after getting down to this complilation error:
>
>   syntax error at ./t line 96, near "$tdir;"
>   Execution of ./t aborted due to compilation errors.
>
> I've gone thru the lines trying to find what is causing the
> error but of course am overlooking it.
>
> Then I pulled just the find(...) part out, put it in its own file.. no
> bang line or nothing and just ran it like: ` perl myscript'.
>
> The error above was the result.
>
> So, how to start breaking down the code to find the problem?
>
> On the surface I can not see a syntactical error at that line.
>
> which looks like this ... snipped:
>
>          [...]
>
>           }                <==          incloses an if clause
>         }                  <==          incloses a while loop
>         close $fh;
>       }, $tdir;            <==          inclusing subroutine
>    );
>
>

One good sleuthing tool is perltidy (perltidy.sourceforge.net) which is good
at unraveling a rat's nest of errors to  tease out the culprit:

For instance, you'd run: perltidy badlywrittenscript.pl and might get
an error diagnostic file that'd say something like:

  The most recent un-matched '{' is on line 7
       7: for my $i (@xxx) {
                          ^
       12:     To save a full .LOG file rerun with -g

---
Charles DeRykus

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to