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
In reply to (bbfu) (cause?) Re2: (bbfu) (warning only during -c) Re3: 'used once' during perl -c
by bbfu
in thread 'used once' during perl -c
by John M. Dlugosz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |