2013-02-15 71 views
1

getting type info文档包括这块建议代码获取代码和整数之间的映射:Perl DBI常量 - 如何访问?

foreach (@{ $DBI::EXPORT_TAGS{sql_types} }) { 
    printf "%s=%d\n", $_, &{"DBI::$_"}; 
} 

但Perl的5.16.2不会允许它:

Can't use string ("DBI::SQL_GUID") as a subroutine ref while "strict refs" in use 

我不知道如何关闭strict refs,我怀疑这不是作者的意图,任何人都这样做。这个子程序如何完成?

回答

4

您可以关闭严格的“裁判”做这个

{ 
    no strict 'refs'; 
    foreach (@{ $DBI::EXPORT_TAGS{sql_types} }) { 
     printf "%s=%d\n", $_, &{"DBI::$_"}; 
    } 
} 
2

为什么你会把no strict 'refs';在外面?以下是比较合适的使用no strict 'refs';

for (@{ $DBI::EXPORT_TAGS{sql_types} }) { 
    no strict 'refs'; 
    printf "%s=%d\n", $_, &{"DBI::$_"}; 
} 

(不要说关于jmcneirney的是一微秒的速度更快,因为那将是错误的东西。)

或者,由于\&是不是受严格参考检查,

for (@{ $DBI::EXPORT_TAGS{sql_types} }) { 
    my $ref = \&{"DBI::$_"}; 
    printf "%s=%d\n", $_, $ref->(); 
}