in reply to (bbfu) (warning only during -c) Re3: 'used once' during perl -c
in thread 'used once' during perl -c

Hmm... a guess: my code is in a .pm file. Perhaps Perl automatically enters another "use" of import when doing a use of a module. Then the issue isn't -c or not, but main-program or not.

  • Comment on Re: (bbfu) (warning only during -c) Re3: 'used once' during perl -c
  • Download Code

Replies are listed 'Best First'.
(bbfu) (cause?) Re2: (bbfu) (warning only during -c) Re3: 'used once' during perl -c
by bbfu (Curate) on Nov 06, 2002 at 02:19 UTC

    From your /msg, I've been able to put together the following:

    [johnsca@CORY tmp]$ cat tst.pm #!/usr/bin/perl package tst; use warnings; use strict; *import = \&foo; sub foo { print "Import foo\n"; } 1; [johnsca@CORY tmp]$ cat tst.pl #!/usr/bin/perl use warnings; use strict; use lib '.'; use tst; [johnsca@CORY tmp]$ perl -c tst.pm Name "tst::import" used only once: possible typo at tst.pm line 9. tst.pm syntax OK [johnsca@CORY tmp]$ perl -c tst.pl Import foo tst syntax OK [johnsca@CORY tmp]$ perl tst.pm Name "tst::import" used only once: possible typo at tst.pm line 9. [johnsca@CORY tmp]$ perl tst.pl Import foo

    From this, I think makes sense. The warning when running perl -c tst.pm (and perl tst.pm) is appropriate, as import is only used once, when you consider only tst.pm. However, once you throw tst.pl into the mix, you get another (implicit) use of *tst::import via the use, as you said, which silences the warning. This makes sense as, according to the docs for use:

    It is exactly equivalent to
    
        BEGIN { require Module; import Module LIST; }
    
    except that Module must be a bareword.
    

    To prevent the warning when checking tst.pm, you can locally disable warnings, as I suggested before, or you can add another (no-op) reference to *import. In the code below, I use use vars qw/*import/; because our doesn't seem to like typeglobs. :) <Update>Though our $import; seems to get rid of the error just fine.</Update>

    [johnsca@CORY tmp]$ cat tst.pm #!/usr/bin/perl package tst; use warnings; use strict; use vars qw/*import/; # or: *import = *import; *import = \&foo; sub foo { print "Import foo\n"; } 1; [johnsca@CORY tmp]$ perl -c tst.pm tst.pm syntax OK

    bbfu
    Black flowers blossum
    Fearless on my breath