2

获取类型信息的文档包括这段用于获取代码和整数之间映射的建议代码:

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

我不知道如何关闭严格的 refs,而且我怀疑任何人这样做都不是作者的本意。这个子程序调用如何完成?

4

2 回答 2

4

您可以通过这样做关闭严格的“参考”

{
    no strict 'refs';
    foreach (@{ $DBI::EXPORT_TAGS{sql_types} }) {
        printf "%s=%d\n", $_, &{"DBI::$_"};
    }   
}
于 2013-02-15T23:02:20.150 回答
3

为什么要放在no strict 'refs';外面?以下是更合适的用法no strict 'refs';

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

(不要说 jmcneirney 快了 1 微秒,因为那是错误的。)

或者,由于\&不受严格的裁判检查,

for (@{ $DBI::EXPORT_TAGS{sql_types} }) {
    my $ref = \&{"DBI::$_"};
    printf "%s=%d\n", $_, $ref->();
}
于 2013-02-15T23:45:44.173 回答