2013-02-15 75 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->(); 
}