Open p5pRT opened 11 years ago
% perl -we 'sub A::f; BEGIN { 0 if *{"A::f"}{CODE} }'
% perl -we 'sub A::f; BEGIN { 0 if *{"A::g"}{CODE} }' Name "A::g" used only once: possible typo at -e line 1.
% perl -we 'BEGIN { 0 if *{"CORE::lc"}{CODE} }'
% perl -we 'BEGIN { 0 if *{"CORE::eval"}{CODE} }' Name "CORE::eval" used only once: possible typo at -e line 1.
I don't think this code should trigger any "used only once" warnings. I'm accessing the symbol table via symbolic references; I'm not using any literal variables.
Even so\, why does *{"CORE::eval"} warn but not *{"CORE::lc"}?
l.mai@web.de wrote:
Even so\, why does *{"CORE::eval"} warn but not *{"CORE::lc"}?
Because \&CORE::lc is a thing\, but the behaviour of CORE::eval can't be adequately captured as a sub.
-zefram
The RT System itself - Status changed from 'new' to 'open'
% perl -we 'sub A::f; BEGIN { 0 if *{"A::f"}{CODE} }'
% perl -we 'sub A::f; BEGIN { 0 if *{"A::g"}{CODE} }' Name "A::g" used only once: possible typo at -e line 1.
% perl -we 'BEGIN { 0 if *{"CORE::lc"}{CODE} }'
% perl -we 'BEGIN { 0 if *{"CORE::eval"}{CODE} }' Name "CORE::eval" used only once: possible typo at -e line 1.
I don't think this code should trigger any "used only once" warnings. I'm accessing the symbol table via symbolic references; I'm not using any literal variables.
perl 5.14.4 also throws the warning. The difference appears with perl 5.16.
Even so\, why does *{"CORE::eval"} warn but not *{"CORE::lc"}?
Here's the list of all of them :
$ perl5.18.1 -MB::Keywords=@Functions -le'for (@Functions) { system qq[$^X -we "BEGIN { 0 if *{q\<CORE::$_>}{CODE} }"] }' Name "CORE::AUTOLOAD" used only once: possible typo at -e line 1. Name "CORE::BEGIN" used only once: possible typo at -e line 1. Name "CORE::DESTROY" used only once: possible typo at -e line 1. Name "CORE::END" used only once: possible typo at -e line 1. Name "CORE::INIT" used only once: possible typo at -e line 1. Name "CORE::CHECK" used only once: possible typo at -e line 1. Name "CORE::UNITCHECK" used only once: possible typo at -e line 1. Name "CORE::dump" used only once: possible typo at -e line 1. Name "CORE::eval" used only once: possible typo at -e line 1. Name "CORE::format" used only once: possible typo at -e line 1. Name "CORE::goto" used only once: possible typo at -e line 1. Name "CORE::grep" used only once: possible typo at -e line 1. Name "CORE::import" used only once: possible typo at -e line 1. Name "CORE::last" used only once: possible typo at -e line 1. Name "CORE::local" used only once: possible typo at -e line 1. Name "CORE::map" used only once: possible typo at -e line 1. Name "CORE::my" used only once: possible typo at -e line 1. Name "CORE::next" used only once: possible typo at -e line 1. Name "CORE::our" used only once: possible typo at -e line 1. Name "CORE::print" used only once: possible typo at -e line 1. Name "CORE::printf" used only once: possible typo at -e line 1. Name "CORE::redo" used only once: possible typo at -e line 1. Name "CORE::require" used only once: possible typo at -e line 1. Name "CORE::return" used only once: possible typo at -e line 1. Name "CORE::say" used only once: possible typo at -e line 1. Name "CORE::sort" used only once: possible typo at -e line 1. Name "CORE::state" used only once: possible typo at -e line 1. Name "CORE::unimport" used only once: possible typo at -e line 1. Name "CORE::use" used only once: possible typo at -e line 1.
As discussed\, the warning is not bogus. This ticket should be closed.
-zefram
On Sat\, Dec 16\, 2017 at 04:00:51AM +0000\, Zefram wrote:
As discussed\, the warning is not bogus. This ticket should be closed.
Although \&CORE::eval returns an undef CV\, as compared to \&CORE::lc which creates a useful CV\, they both create an entry in the %CORE:: stash which is a GV with a GvCV slot pointing to a CV.
So its not clear to me why one should warn and the other shouldn't.
-- This is a great day for France! -- Nixon at Charles De Gaulle's funeral
On Mon\, 18 Dec 2017 03:45:37 -0800\, davem wrote:
On Sat\, Dec 16\, 2017 at 04:00:51AM +0000\, Zefram wrote:
As discussed\, the warning is not bogus. This ticket should be closed.
Although \&CORE::eval returns an undef CV\, as compared to \&CORE::lc which creates a useful CV\, they both create an entry in the %CORE:: stash which is a GV with a GvCV slot pointing to a CV.
So its not clear to me why one should warn and the other shouldn't.
$ perl5.26.0 -le 'print defined *{"CORE::lc"}||0; print defined ${"CORE::eval"}||0;' 1 0
--
Father Chrysostomos
Migrated from rt.perl.org#119991 (status was 'open')
Searchable as RT119991$