http://www.perlmonks.org?node_id=588398

Wiggins has asked for the wisdom of the Perl Monks concerning the following question:

In order to use perlcc. (no comments needed), I need to change all of the 'use' commands to 'require' for inclusion in the compile.

require threads ; require threads::shared ; require IO::Socket; require Thread::Semaphore; require Getopt::Std; require Carp;

Works for all but Carp.

PerlThreads]# perlcc -o xm xm.pl /usr/bin/perlcc: xm.pl did not compile: String found where operator expected at xm.pl line 98, near "carp "bad + args"" (Do you need to predeclare carp?) String found where operator expected at xm.pl line 144, near "carp "N +amed pipe (-n) required "" (Do you need to predeclare carp?) String found where operator expected at xm.pl line 151, near "carp "p +roblem with the NamedPipe ($opt_n) "" (Do you need to predeclare carp?) ....

obvious - don't use Carp. Other than that, any suggestions or explanations?

Replies are listed 'Best First'.
Re: Require Carp - doesn't
by idsfa (Vicar) on Dec 07, 2006 at 17:20 UTC

    Did you Super Search? Steve_p just wrote about this.


    The intelligent reader will judge for himself. Without examining the facts fully and fairly, there is no way of knowing whether vox populi is really vox dei, or merely vox asinorum. — Cyrus H. Gordon
      The thread referred to is about the dynamic loading, it usefulness, and attempted optimizations. I know I use Carp; it is needed for the compile.

      But what I did find (looking at code examples) is that "requiring warnings" prior solved the problem.

      Tis strange that Carp doesn't complain when a dependency is not present.

        This has nothing to do with Carp's dependencies (and it doesn't depend on warnings). In fact, your "fix" is actually incorrect and buggy and Steve Peters posted his comment to warn people away from doing that! It has nothing to do with dynamic loading either. It has everything to do with subroutine prototypes, as Steve explained.

        Perl hasn't loaded Carp when it tries to compile the carp() calls. Without parentheses, it has no idea how many arguments the function should take (or even if carp is a function call at all), so it warns.

        It would do that even if you weren't trying to use perlcc or Carp.

Re: Require Carp - doesn't
by diotalevi (Canon) on Dec 07, 2006 at 22:21 UTC

    perlcc doesn't work anyway. Perhaps you want PAR instead?

    ⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊