【问题标题】:Perl DBI Constants - how to access?Perl DBI 常量 - 如何访问?
【发布时间】:2013-02-15 22:56:14
【问题描述】:

getting type info 的文档包含这段建议的代码,用于获取代码和整数之间的映射:

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,而且我怀疑任何人都没有这样做的意图。这个子程序的调用如何完成?

【问题讨论】:

    标签: sql perl dbi subroutine


    【解决方案1】:

    您可以通过这样做关闭严格的“引用”

    {
        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 快了一微秒,因为那是错误的。)

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 2019-06-15
        • 2011-03-05
        相关资源
        最近更新 更多